---
title: "Analyze experience (legacy GET)"
method: GET
path: "/v25-10-beta/analytics/resource/{experienceId}"
tags: ["Fetch Experience Data"]
deprecated: true
---

# Analyze experience (legacy GET)

`GET /v25-10-beta/analytics/resource/{experienceId}`

## Request

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

> **Deprecated.**

Retrieve analytics data for a specific experience, including metrics, variations, and optionally graph images.

This legacy GET endpoint is deprecated, intentionally limited to the original query-parameter contract, and kept only as a beta compatibility path. Use the POST variant on the same path for all new integrations. The GET endpoint will be removed when the beta version ends.

`view` is **optional** and defaults to `overview`; omitting it returns the same payload as `?view=overview`. Valid values are `overview`, `audience`, and `post_test`. The value `summary` is not supported. When `view=audience`, you must also provide the `audience` query parameter. The `audience` parameter is rejected with a `400` when `view` is `overview` (including when `view` is omitted and therefore defaulted).

The `experienceId` path parameter must be a UUID. Any other value returns `400` with `{ "errors": [], "properties": { "experienceId": { "errors": ["Invalid UUID"] } } }` before the experience is looked up.

The legacy `start` and `end` query parameters must be 10-digit Unix epoch timestamps in seconds, not milliseconds. The POST variant's `startTs` / `endTs` names are **not** accepted here — they are stripped silently, so sending them returns `200` over the experience's full lifetime rather than the range you asked for.

Graphs are requested with a comma-separated `graphs` query parameter holding metric identifiers (for example `?graphs=net_revenue_per_visitor,conversion_rate`), with `graphOutput` selecting `png` (default, returns `url`) or `base64` (returns `data`). Note the name: the POST variant nests this as `graphs.outputFormat`; an `outputFormat` query parameter is stripped here. Unlike the POST variant, which rejects an unknown identifier with a `400`, this endpoint **silently drops** unrecognized values and returns `graphs: []`.

Response payloads include `impact` (object with `est_monthly_revenue_increase`: the projected 30-day revenue lift from the best non-control variation vs. control, or `null` when there is insufficient data) plus distribution and ordering helpers such as `audienceOrder`, `histogram`, `kde`, and `cdf`.

As on the POST variant, `impact` uses whole-variation overview metrics with the same filters and time window, including under `view=audience`. Under `view=post_test`, the estimate is `null`.

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

## Path parameters

- `experienceId` string, uuid, required

## Query parameters

- `graphs` string: Comma-separated list of graph IDs to include in response. Applies to "view=overview" and "view=audience" requests. On this deprecated GET endpoint an unrecognized ID is silently ignored and "graphs" comes back empty; the POST variant rejects it with a 400 instead. Available options: - abandoned_cart_rate - abandoned_checkout_rate - add_to_cart_rate - avg_discount_per_all_orders - avg_discount_per_discounted_order - avg_product_revenue_per_unit - avg_units_per_order - checkout_address_submitted_rate - checkout_begin_rate - checkout_enter_contact_info_rate - conversion_rate - net_product_revenue_per_order - net_revenue_from_onsite_upsell - net_revenue_from_post_purchase_offer - net_revenue_from_upsell - net_revenue_per_order - net_revenue_per_visitor - net_shipping_revenue_per_order - pct_orders_free_shipping - pct_orders_with_onsite_upsell - pct_orders_with_post_purchase_offer - pct_orders_with_upsell - pct_subscription_orders - profit_per_order - profit_per_visitor - subscription_orders_per_visitor - subscription_product_revenue_per_order - subscription_profit_per_visitor - subscription_revenue_per_order - subscription_revenue_per_visitor - view_collection_page_rate - view_product_page_rate
- `graphOutput` 'png' | 'base64': Output format for graph images. 'png' (default) uploads to S3 and returns a URL. 'base64' returns the raw base64-encoded PNG data inline.
- `view` 'overview' | 'audience' | 'post_test': Resource view to analyze. Supported values are 'overview' for variation-level metrics, 'audience' for a breakdown by the selected audience dimension, and 'post_test' for post-test metrics (customers who converted during the test, tracked by their purchase behavior after that conversion, split by variation).
- `audience` 'device_type' | 'visitor_type' | 'source_channel' | 'source_site' | 'country_code' | 'landing_page_full_path' | 'purchase_likelihood': Audience breakdown dimension. Required when `view` is `audience`. Optional when `view` is `post_test` (returns the post-test breakdown by the selected dimension). Not allowed when `view` is `overview`. Use one of the supported audience fields such as `device_type`, `visitor_type`, or `source_channel`.
- `analyticsViewType` 'test_orders_only' | 'sitewide_orders' | 'none': Optional analytics view preset used by the backend when building the analysis request.
- `end` string: Optional analysis end timestamp as a 10-digit Unix epoch string in seconds (not milliseconds).
- `start` string: Optional analysis start timestamp as a 10-digit Unix epoch string in seconds (not milliseconds).

## Response `200`

OK

- object
  - `datasetId` 'order_line_items' | 'orders' | 'aiProfit' | 'variation_overview' | 'variation_audience' | 'variation_timeseries_discrete' | 'variation_timeseries_cumulative' | 'experience_countries' | 'variation_shipping_method' | 'variation_histogram' | 'variation_products' | 'variation_product_groups' | 'variation_order_unit_mix' | 'custom_events_plugin' | 'custom_events_server' | 'order_reconciliation' | 'order_reconciliation_export' | 'experience_session_order' | 'timeseries' | 'country_codes' | 'snapshots' | 'experience_shipping_methods' | 'timeseries_audience' | 'snapshots_audience' | 'holiday_benchmarking_single_day' | 'holiday_benchmarking_multiple_days' | 'order_distribution_histogram' | 'order_distribution_unit_mix' | 'conversion_snapshots' | 'conversion_funnel' | 'conversion_timeseries' | 'variation_post_metrics' | 'variation_post_metrics_audience', required
  - `latestRunTs` number, required
  - `cogsConfigured` boolean: Whether cost of goods sold (COGS) is configured for the store (any revenue has COGS data). When false, all profit metric values are null because they cannot be computed; use revenue metrics instead. Only present when the request includes a profit metric.
  - `cogsCoveragePct` number: Fraction of revenue (0-1) backed by line items that have COGS data. 0 means profit metrics are unavailable and returned as null. A value between 0 and 1 means profit is based on partial COGS coverage; 1 means full coverage. Only present when the request includes a profit metric.
  - `metrics` unknown[], required: Array of metric objects. Each metric object may contain the following fields (all optional): **Dimension Fields:** - variation_id (string, UUID): The variation identifier - dt (string): Timestamp for time series data - audience (string): Audience segment identifier **Metric Fields (alphabetical):** - abandoned_cart_rate: Rate of abandoned carts - abandoned_checkout_rate: Rate of abandoned checkouts - add_to_cart_rate: Add to cart rate - avg_discount_per_all_orders: Average discount amount across all orders - avg_discount_per_discounted_order: Average discount amount for orders with discounts - avg_product_revenue_per_unit: Average revenue per product unit - avg_units_per_order: Average number of units per order - checkout_address_submitted_rate: Rate of checkouts with address submitted - checkout_begin_rate: Checkout initiation rate - checkout_enter_contact_info_rate: Rate of checkouts with contact info entered - conversion_rate: Conversion rate metric with statistical details - gross_profit_per_order: Gross profit per order. Requires COGS to be configured. Null when COGS are not configured (cogsConfigured is false). Based on partial COGS coverage when cogsCoveragePct is between 0 and 1. - gross_profit_per_visitor: Gross profit per visitor. Requires COGS to be configured. Null when COGS are not configured (cogsConfigured is false). Based on partial COGS coverage when cogsCoveragePct is between 0 and 1. - n_orders: Number of orders - n_visitors: Number of visitors - net_product_revenue_per_order: Average product revenue per order - net_revenue: Total net revenue - net_revenue_per_order: Average revenue per order - net_revenue_per_visitor: Average revenue per visitor (RPV). - net_shipping_revenue_per_order: Average shipping revenue per order - pct_orders_free_shipping: Percentage of orders with free shipping - pct_subscription_orders: Percentage of orders that are subscriptions - subscription_gross_profit_per_visitor: Gross profit from subscriptions per visitor. Requires COGS to be configured. Null when COGS are not configured (cogsConfigured is false). - subscription_orders_per_visitor: Subscription orders per visitor - subscription_revenue_per_order: Revenue from subscriptions per order - subscription_revenue_per_visitor: Revenue from subscriptions per visitor - view_collection_page_rate: Collection page view rate - view_product_page_rate: Product page view rate **Funnel visitor counts (returned by view=overview):** - n_visitors_viewed_product_page: Visitors who viewed a product page - n_visitors_viewed_collection_page: Visitors who viewed a collection page - n_visitors_added_to_cart: Visitors who added to cart - n_visitors_checkout_started: Visitors who started checkout - n_visitors_checkout_contact_info_submitted: Visitors who submitted contact info - n_visitors_checkout_address_info_submitted: Visitors who submitted address info - n_visitors_abandoned_cart: Visitors who abandoned a cart - n_visitors_abandoned_checkout: Visitors who abandoned a checkout - n_visitors_ordered: Visitors who placed an order **Absolute totals (returned by view=overview):** - net_product_revenue: Total net product revenue - gross_profit: Total gross profit. Requires COGS to be configured; null when cogsConfigured is false. - total_units: Total units sold - total_discount: Total discount amount - n_orders_discounted: Number of orders carrying a discount - pct_revenue_with_cogs: Fraction of revenue backed by line items with COGS data - n_subscription_orders: Number of subscription orders - subscription_product_revenue: Product revenue from subscription orders - subscription_units: Units sold in subscription orders NOTE: this list documents the commonly returned fields, but the response is driven by the store's configured metric catalogue and by the requested view, so additional metric keys may be present. Clients should tolerate unknown keys rather than validating against a closed set. Statistical metric objects can contain the fields below. Numeric fields can be null when a value or statistic is unavailable; null does not mean zero. A metric can have a value without confidence intervals or probabilities. - value (number or null): The metric value - ci_low (number or null): Lower bound of the 95% confidence interval - ci_high (number or null): Upper bound of the 95% confidence interval - plus_minus (number or null): Half-width of the 95% confidence interval, i.e., (ci_high - ci_low) / 2 - p2bb (number, 0-1, or null): Probability to be Best - p2bc (number, 0-1, or null): Probability to Beat Control - uplift (object): Relative lift over the control variation. Contains: - value (number or null): The relative lift (e.g., 0.12 = +12%) - ci_low (number or null): Lower bound of the 95% confidence interval for the uplift - ci_high (number or null): Upper bound of the 95% confidence interval for the uplift - plus_minus (number or null): Half-width of the uplift's 95% confidence interval Note: p2bc and uplift are relative to the control variation and appear only on non-control variations; they are absent on the control.
    - unknown
  - `audienceOrder` unknown, required
  - `histogram` unknown, required
  - `kde` unknown, required
  - `cdf` unknown, required
  - `variations` object[]
    - `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.
    - `priceChange` string, nullable: Price adjustment amount for pricing-type experiences. Positive increases price, negative discounts. Use priceChange for simple price A/B tests; use offer for structured discount campaigns (tiered, BOGO, free shipping).
    - `priceChangeUnit` 'percent' | 'dollar', nullable: How priceChange is applied: as a percentage of the original price or a fixed monetary amount.
    - `priceRoundingType` 'none' | 'nearest' | 'up' | 'down', nullable: Rounding strategy applied after priceChange (e.g., round up, round down, charm pricing).
    - `priceRoundingAmount` string, nullable: Target value for rounding (e.g., 0.99 for charm pricing like $X.99).
    - `onsiteEdits` object[], required: DOM content modifications (text, HTML, image swaps, element removal). For CSS styling changes, use onsiteInjections instead.
      - `id` string, uuid, required: Server-generated. Read-only.
      - `onsiteEditType` 'html' | 'text' | 'image' | 'hide', nullable: Content modification strategy (html, text, image, or hide).
      - `variationId` string, uuid, required: References the parent variation.
      - `find` string, nullable, required: Pattern to locate on the page. Interpreted as regex when isRegex is true.
      - `title` string, nullable: Dashboard label for identifying this edit.
      - `isRegex` boolean, required: When true, 'find' is treated as a regular expression.
      - `replace` string, required: Replacement content. Interpretation depends on onsiteEditType: HTML markup, plain text, or image URL.
      - `querySelectors` string[], required: CSS selectors scoping which DOM elements this edit targets (e.g., '.product-title').
      - `skip` boolean, required: When true, this edit is temporarily disabled without being deleted.
      - `remove` boolean, required: When true, the matched element is removed from the DOM instead of having its content replaced.
      - `groupId` string: Groups related edits together so they can be managed as a unit.
      - `isHtml` boolean, required
      - `isImage` boolean, required
      - `insertType` 'beforebegin' | 'afterbegin' | 'beforeend' | 'afterend', nullable, required: DOM insertion position relative to the target (beforebegin, afterbegin, beforeend, afterend). Null means content replacement.
      - `createdAtUrl` string, nullable: Server-generated. Read-only. Storefront URL where this edit was originally created via the visual editor.
      - `createdAtTs` number, nullable: Server-generated. Read-only. Unix timestamp in seconds.
      - `imageSearchUrl` string, nullable: URL pathname for locating images to replace. When set, images are found by URL match; when null, querySelectors is used instead.
      - `source` 'ai', nullable
    - `onsiteInjections` object, nullable: CSS styling and custom JS injection. At most one per variation. For DOM content changes (text, images, HTML), use onsiteEdits instead.
      - `id` string, uuid, required: Server-generated. Read-only.
      - `variationId` string, uuid, required: References the parent variation.
      - `customCss` string, nullable: CSS injected globally on the page when this variation is active.
      - `customJs` string, nullable: JavaScript executed on the page. Execution timing controlled by jsInjectionMode.
      - `jsInjectionMode` object, required: Controls when customJs runs: immediately on load, after window load, or after a configurable delay.
        - `type` 'immediately' | 'onWindowLoad' | 'timeout', required: Execution timing for injected JS. When 'timeout', the timeout field specifies the delay.
        - `timeout` union: Delay in milliseconds before JS execution. Only relevant when type is 'timeout'.
          - number
          - string
      - `source` 'ai', nullable
    - `offer` object, nullable: Structured discount configuration (tiered volume discounts, cart-level discounts, gift-with-purchase, free shipping). Use offer for campaign/discount experiences; use priceChange for simple price A/B tests.
      - `id` string, uuid, required: Server-generated. Read-only.
      - `variationId` string, uuid, required: References the parent variation this offer belongs to.
      - `enabled` boolean, required: Whether the offer is actively applying discounts to customers on the storefront.
      - `isTest` boolean, required: Set on some offers the app copied between test groups. It doesn't mean draft and doesn't change who gets the discount; an offer saved with it true is renamed 'Volume Offer Test Group'. The external API always saves false.
      - `isArchived` boolean, required: Whether the offer has been archived and is no longer active.
      - `name` string, required: Internal label for identifying the offer in dashboards.
      - `unitType` 'unit' | 'dollar', required: Threshold basis for tiered discounts: per-item quantity or monetary amount spent.
      - `discountType` 'percentage' | 'dollar', required: How the discount value is calculated (e.g., percentage off, fixed amount off).
      - `tiers` object[], required: Volume discount tiers ordered by threshold ascending (e.g., buy 2 = 10% off, buy 3 = 15% off).
        - `id` string, uuid, required
        - `minimumUnits` number, required
        - `maximumUnits` number, required
        - `unitDiscount` number, required
        - `bxgyGetQuantity` integer, required
        - `discountTitle` string, nullable, required
        - `giftWithPurchaseTitle` string, nullable, required
        - `isFreeShipping` boolean, required
        - `isGiftWithPurchase` boolean, required
        - `giftWithPurchaseProductId` string, nullable
        - `giftWithPurchaseVariantId` string, nullable
        - `giftWithPurchaseVariantIds` string[], required
        - `autoAddGiftWithPurchase` boolean, required
        - `giftWithPurchaseHandle` string, nullable
      - `maximumDollarDiscount` number, nullable: Hard cap on the total dollar discount. Null means no cap is applied.
      - `discountApplicationType` 'tieredDiscount' | 'cartDiscount' | 'freeGift' | 'freeShipping' | 'buyXGetY' | '', required: Core discount mechanic (tiered volume, flat cart-level, gift-with-purchase, or free shipping).
      - `discountApplicationMethod` 'perItem' | 'perOrder', required: Whether the discount applies per individual item or to the entire order.
      - `combinesWithIntelligems` boolean, required: Whether this offer stacks with other active Intelligems discounts.
      - `combinesWithShopify` boolean, required: Whether this offer stacks with native Shopify discount codes.
      - `shouldRejectCodes` boolean, required: When true, manual discount codes entered at checkout are rejected while this offer is active.
      - `shippingDiscount` object, nullable, required: Shipping discount details. Only present when discountApplicationType is freeShipping.
        - `id` string, uuid, required
        - `discountType` 'percentage' | 'dollar', required
        - `unitDiscount` number, required: Percent off the shipping rate. 100 is free shipping.
        - `rateFilter` union, required
          - object
            - `type` 'amount', required
            - `amount` number
          - object
            - `type` 'name', required
            - `rules` object[], required
              - …
        - `countryFilter` object, nullable, required
          - `allow` string[]
          - `exclude` string[]
        - `discountLabel` string, nullable, required
      - `requireSameItem` boolean, required: For tiered discounts: when true, only multiples of the same product count toward thresholds.
      - `bxgyGetProductScope` 'all' | 'list', nullable: For Buy X Get Y: where the free units come from. Null means the products bought; 'list' means the offer's get products; 'all' means any product.
      - `subscriptionApplicationType` 'oneTime' | 'firstSub' | 'oneTimeAndFirstSub', required: Controls which purchase types this offer applies to: 'oneTime' (one-time purchases only), 'firstSub' (first subscription orders only), or 'oneTimeAndFirstSub' (both one-time and first subscription orders). Free shipping offers (discountApplicationType 'freeShipping') always apply to both and are saved as 'oneTimeAndFirstSub'.
    - `offerId` string, uuid, nullable: Server-generated. Read-only. References the associated offer. Populated when offer is set.
    - `shippingRateGroups` object[]: Shipping rate overrides. Only populated for shipping test experiences.
      - `id` string, uuid, required
      - `groupType` 'flatRate' | 'flatRateWithThreshold' | 'thresholdOnly' | 'tieredByPriceOrWeight' | 'custom', required
      - `position` number, required
      - `rates` object[], required
        - `id` string, uuid
        - `name` string, required
        - `amount` number, required
        - `rateCode` string, nullable
        - `rateType` 'amount' | 'threshold' | 'tier', required
        - `currency` 'AED' | 'AFN' | 'ALL' | 'AMD' | 'ANG' | 'AOA' | 'ARS' | 'AUD' | 'AWG' | 'AZN' | 'BAM' | 'BBD' | 'BDT' | 'BGN' | 'BIF' | 'BMD' | 'BND' | 'BOB' | 'BRL' | 'BSD' | 'BWP' | 'BZD' | 'CAD' | 'CDF' | 'CHF' | 'CLP' | 'CNY' | 'COP' | 'CRC' | 'CVE' | 'CZK' | 'DJF' | 'DKK' | 'DOP' | 'DZD' | 'EGP' | 'ETB' | 'EUR' | 'FJD' | 'FKP' | 'GBP' | 'GEL' | 'GIP' | 'GMD' | 'GNF' | 'GTQ' | 'GYD' | 'HKD' | 'HNL' | 'HRK' | 'HTG' | 'HUF' | 'IDR' | 'ILS' | 'INR' | 'ISK' | 'JMD' | 'JPY' | 'KES' | 'KGS' | 'KHR' | 'KMF' | 'KRW' | 'KYD' | 'KZT' | 'LAK' | 'LBP' | 'LKR' | 'LRD' | 'LSL' | 'MAD' | 'MDL' | 'MGA' | 'MKD' | 'MMK' | 'MNT' | 'MOP' | 'MUR' | 'MVR' | 'MWK' | 'MXN' | 'MYR' | 'MZN' | 'NAD' | 'NGN' | 'NIO' | 'NOK' | 'NPR' | 'NZD' | 'PAB' | 'PEN' | 'PGK' | 'PHP' | 'PKR' | 'PLN' | 'PYG' | 'QAR' | 'RON' | 'RSD' | 'RUB' | 'RWF' | 'SAR' | 'SBD' | 'SCR' | 'SEK' | 'SGD' | 'SHP' | 'SLL' | 'SRD' | 'STD' | 'SZL' | 'THB' | 'TJS' | 'TOP' | 'TRY' | 'TTD' | 'TWD' | 'TZS' | 'UAH' | 'UGX' | 'USD' | 'UYU' | 'UZS' | 'VND' | 'VUV' | 'WST' | 'XAF' | 'XCD' | 'XOF' | 'XPF' | 'YER' | 'ZAR' | 'ZMW', required
        - `condition` object, nullable
          - `id` string, uuid
          - `min` union, required
            - number
            - string
          - `max` union
            - number
            - string
          - `conditionType` 'currency' | 'weight', required
          - `unit` 'g' | 'kg' | 'lb' | 'oz', nullable
        - `description` string, nullable
      - `variationId` string, uuid, required
      - `scopes` object[], nullable
        - `marketId` string, required
        - `collectionIds` string[], nullable, required
        - `originLocationIds` string[], required
    - `excludeProducts` boolean: When true, specific products are excluded from price changes. Use excludeProducts when most products should be tested and only a few excluded. Mutually exclusive with includeProducts.
    - `includeProducts` boolean: When true, only specific products receive price changes. Use includeProducts when only a few products should be tested. Mutually exclusive with excludeProducts.
    - `testExperienceId` string, nullable: Links to another experience for advanced multi-experience configurations.
    - `functionSyncError` boolean, required: Server-generated. Read-only. Indicates a sync failure with Shopify Functions for this variation's discount.
    - `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.
    - `userInterfaces` object[]: UI widget configurations displayed for this variation.
      - `id` string, uuid, required
      - `isEnabled` boolean
      - `isArchived` boolean, required
      - `widget` object
        - `id` string, uuid, required
        - `name` string, required
        - `enabledSitewide` boolean, required
        - `parentId` string, uuid, nullable
        - `widgetType` 'messageBoxPopup' | 'messageBoxSlideOut' | 'quantityButtons' | 'discountProgressBar' | 'shippingProgressBar' | 'gwpVariantPicker', required
        - `config` object, required
          - `desktop` unknown
          - `mobile` unknown
      - `widgetId` string, required
      - `category` 'quantityButtons' | 'progressBar' | 'messageBox' | 'gwpVariantPicker'
      - `variationId` string, uuid, nullable
      - `desktopVariables` unknown
      - `mobileVariables` unknown
      - `styleOverrides` unknown
    - `checkoutBlocks` union[]: Shopify checkout extensibility block configurations for this variation.
      - union
        - object
          - `id` string, uuid, required: Server-generated. Read-only.
          - `variationId` string, uuid, required: References the parent variation.
          - `locationId` string, required: Shopify checkout extensibility target location where the block renders.
          - `blockType` 'trustBadge', required
          - `blockTemplate` 'badgeList' | 'badgeTiles' | 'callOut' | 'grid' | 'header' | 'images' | 'brandLogo' | 'textOnly', nullable: The template preset this block was created from, within its block type. Null on blocks saved before templates were persisted, which callers must treat as unknown rather than assuming a default.
          - `name` string, required: Display name for identifying this block in the dashboard.
          - `displayConditions` object: Optional cart-based conditions; the block renders only when the expression evaluates true against the current cart.
            - `id` string, uuid, required
            - `expression` object[], required
              - …
          - `variables` object, required: Configurable content for the trust badge (e.g., badge images, guarantee text).
            - `headerText` union, required
              - …
            - `items` object[], required
              - …
          - `styles` object, required: CSS styling overrides for the trust badge appearance.
            - `typography` object, required
              - …
            - `backgroundColors` object, required
              - …
            - `colors` object, required
              - …
            - `layout` object, required
              - …
            - `appearance` object, required
              - …
        - object
          - `id` string, uuid, required: Server-generated. Read-only.
          - `variationId` string, uuid, required: References the parent variation.
          - `locationId` string, required: Shopify checkout extensibility target location where the block renders.
          - `blockType` 'upsell', required
          - `blockTemplate` 'productTiles' | 'productList' | 'singleProduct' | 'singleProductCheckbox', nullable: The template preset this block was created from, within its block type. Null on blocks saved before templates were persisted, which callers must treat as unknown rather than assuming a default.
          - `name` string, required: Display name for identifying this block in the dashboard.
          - `displayConditions` object: Optional cart-based conditions; the block renders only when the expression evaluates true against the current cart.
            - `id` string, uuid, required
            - `expression` object[], required
              - …
          - `variables` object, required: Configurable content for the upsell block (e.g., product selection, heading text, CTA label).
            - `headerText` union, required
              - …
            - `maxProductLimit` integer, required
            - `excludeItemsInCart` boolean, required
            - `excludeOutOfStock` boolean, required
            - `buttonText` string, required
            - `imageSize` number, required
            - `imageSizeUnit` 'pixels' | 'percentage', required
            - `imageAspectRatio` string, required
            - `mediaSpacing` string, required
            - `discount` object
              - …
          - `styles` object, required: CSS styling overrides for the upsell block appearance.
            - `typography` object, required
              - …
            - `backgroundColors` object, required
              - …
            - `colors` object, required
              - …
            - `layout` object, required
              - …
            - `appearance` object, required
              - …
          - `upsellProductRules` object[], required: Product selection and recommendation rules that determine which products to show in this upsell block.
            - `id` string, uuid, required
            - `checkoutBlockId` string, uuid, required
            - `priority` integer, required
            - `cartTargeting` object, required
              - …
            - `action` Schema0, required
              - …
            - `variationId` string, uuid, required
          - `agenticLogicPlacementId` string, uuid, nullable: Agentic Logic placement this block evaluates through. Absent means the legacy rule engine serves it — clearing the mapping is the per-surface rollback.
          - `agenticLogicRuleId` string, uuid, nullable: WRITE-SIDE intent: the Agentic Logic rule this block should serve. The experience save upserts the placement and the (placement, variation) assignment from it and stamps `agenticLogicPlacementId`, so callers never assemble that pair themselves. Null detaches the block and returns it to the legacy engine. Reads echo the rule currently assigned.
        - object
          - `id` string, uuid, required: Server-generated. Read-only.
          - `variationId` string, uuid, required: References the parent variation.
          - `locationId` string, required: Shopify checkout extensibility target location where the block renders.
          - `blockType` 'shippingProgressBar', required
          - `blockTemplate` 'minimal' | 'milestones', nullable: The template preset this block was created from, within its block type. Null on blocks saved before templates were persisted, which callers must treat as unknown rather than assuming a default.
          - `name` string, required: Display name for identifying this block in the dashboard.
          - `displayConditions` object: Optional cart-based conditions; the block renders only when the expression evaluates true against the current cart.
            - `id` string, uuid, required
            - `expression` object[], required
              - …
          - `variables` object, required
            - `headerText` union
              - …
            - `currency` string, required
            - `template` 'minimal' | 'milestones', required
            - `tiers` object[], required
              - …
          - `styles` object, required
            - `typography` object, required
              - …
            - `backgroundColors` object, required
              - …
            - `colors` object, required
              - …
            - `layout` object, required
              - …
            - `appearance` object, required
              - …
        - object
          - `id` string, uuid, required: Server-generated. Read-only.
          - `variationId` string, uuid, required: References the parent variation.
          - `locationId` string, required: Shopify checkout extensibility target location where the block renders.
          - `blockType` 'timer', required
          - `blockTemplate` 'textCountdown' | 'digitalClock' | 'inlinePill', nullable: The template preset this block was created from, within its block type. Null on blocks saved before templates were persisted, which callers must treat as unknown rather than assuming a default.
          - `name` string, required: Display name for identifying this block in the dashboard.
          - `displayConditions` object: Optional cart-based conditions; the block renders only when the expression evaluates true against the current cart.
            - `id` string, uuid, required
            - `expression` object[], required
              - …
          - `variables` object, required
            - `timerMode` 'fixedDate' | 'perVisitor' | 'recurring', required
            - `endDateTime` string, nullable
            - `durationMinutes` integer, required
            - `resetIntervalUnit` 'hour' | 'day' | 'week', nullable
            - `resetTimeOfDay` string, nullable
            - `resetDayOfWeek` union
              - …
            - `resetMinuteOfHour` integer, nullable
            - `resetTimezone` string, nullable
            - `expiredBehavior` 'remove' | 'showText', required
            - `timerTemplate` 'textCountdown' | 'digitalClock' | 'inlinePill', required
            - `showDays` boolean, required
            - `showHours` boolean, required
            - `showMinutes` boolean, required
            - `showSeconds` boolean, required
            - `countdownText` union, required
              - …
            - `expiredText` union, required
              - …
            - `headline` union, required
              - …
          - `styles` object, required
            - `typography` object, required
              - …
            - `backgroundColors` object, required
              - …
            - `colors` object, required
              - …
            - `layout` object, required
              - …
            - `appearance` object, required
              - …
            - `digits` object, required
              - …
        - object
          - `id` string, uuid, required: Server-generated. Read-only.
          - `variationId` string, uuid, required: References the parent variation.
          - `locationId` string, required: Shopify checkout extensibility target location where the block renders.
          - `blockType` 'faqs', required
          - `blockTemplate` 'faqsAccordion', nullable: The template preset this block was created from, within its block type. Null on blocks saved before templates were persisted, which callers must treat as unknown rather than assuming a default.
          - `name` string, required: Display name for identifying this block in the dashboard.
          - `displayConditions` object: Optional cart-based conditions; the block renders only when the expression evaluates true against the current cart.
            - `id` string, uuid, required
            - `expression` object[], required
              - …
          - `variables` object, required
            - `headerText` union
              - …
            - `showDivider` boolean, required
            - `allowMultipleOpen` boolean, required
            - `questions` object[], required
              - …
          - `styles` object, required
            - `typography` object, required
              - …
            - `backgroundColors` object, required
              - …
            - `colors` object, required
              - …
            - `layout` object, required
              - …
            - `appearance` object, required
              - …
        - object
          - `id` string, uuid, required: Server-generated. Read-only.
          - `variationId` string, uuid, required: References the parent variation.
          - `locationId` string, required: Shopify checkout extensibility target location where the block renders.
          - `blockType` 'postPurchaseUpsell', required
          - `blockTemplate` unknown
          - `name` string, required: Display name for identifying this block in the dashboard.
          - `displayConditions` object: Optional cart-based conditions; the block renders only when the expression evaluates true against the current cart.
            - `id` string, uuid, required
            - `expression` object[], required
              - …
          - `variables` object, required
            - `headerText` string, required
            - `discountType` 'none' | 'percentage' | 'fixed', required
            - `discountValue` number, nullable
            - `compareAtPriceDisplay` 'none' | 'compareAtPrice' | 'regularPrice', required
            - `imageAspectRatio` string, required
            - `excludeOutOfStock` boolean, required
            - `excludeItemsInCart` boolean, required
            - `maxProductLimit` integer, required
            - `bannerEnabled` boolean, required
            - `bannerTitle` string
            - `bannerSubtitle` string
            - `customerFirstNameFallback` string
            - `compareAtPriceEnabled` boolean, required
            - `descriptionEnabled` boolean, required
            - `quantitySelectorEnabled` boolean, required
            - `quantityLabel` string
            - `maxQuantityType` string
            - `maxQuantity` integer
            - `moneyLineEnabled` boolean, required
            - `moneyLineSubtotal` boolean, required
            - `moneyLineShipping` boolean, required
            - `moneyLineTaxes` boolean, required
            - `primaryButtonText` string, required
            - `secondaryButtonEnabled` boolean, required
            - `secondaryButtonText` string, required
            - `headingLevel` string, required
            - `countdownTimerEnabled` boolean
            - `timerCheckout` object
              - …
            - `offerTimeout` number
            - `discount` object
              - …
          - `styles` object, required
            - `typography` object, required
              - …
            - `backgroundColors` object, required
              - …
            - `colors` object, required
              - …
            - `appearance` object, required
              - …
          - `upsellProductRules` object[], required: Product selection and recommendation rules that determine which products to show in this upsell block.
            - `id` string, uuid, required
            - `checkoutBlockId` string, uuid, required
            - `priority` integer, required
            - `cartTargeting` object, required
              - …
            - `action` Schema0, required
              - …
            - `variationId` string, uuid, required
          - `agenticLogicPlacementId` string, uuid, nullable: Agentic Logic placement this block evaluates through. Absent means the legacy rule engine serves it — clearing the mapping is the per-surface rollback.
          - `agenticLogicRuleId` string, uuid, nullable: WRITE-SIDE intent: the Agentic Logic rule this block should serve. The experience save upserts the placement and the (placement, variation) assignment from it and stamps `agenticLogicPlacementId`, so callers never assemble that pair themselves. Null detaches the block and returns it to the legacy engine. Reads echo the rule currently assigned.
    - `cartTargeting` object[]: Cart-based targeting rules that determine when this variation is shown based on cart contents.
      - `id` string, uuid, required
      - `expression` object[], required
        - `query` object
          - `key` 'anything' | 'productId' | 'collection' | 'tag' | 'cartSubtotal' | 'cartItemCount' | 'subscription', required
          - `type` 'anything' | 'productId' | 'collection' | 'tag' | 'cartSubtotal' | 'cartItemCount' | 'subscription', required
          - `filter` 'includes' | 'doesNotInclude' | 'greaterThan' | 'lessThan' | 'equalTo' | 'greaterThanOrEqual' | 'lessThanOrEqual' | 'between', required
          - `value` union
            - string
            - number
            - object
        - `operator` 'and' | 'or' | 'start_paren' | 'end_paren'
    - `components` object[]: Onsite component configurations (e.g. onsite upsells) rendered on the storefront for this variation.
      - `id` string, uuid, required: Server-generated. Read-only.
      - `variationId` string, uuid, required: References the parent variation this component belongs to.
      - `config` union, required: The saved upsell: its type, look, products, targeting, and discount.
        - object
          - `type` 'onsiteUpsell', required: Discriminator for the component kind.
          - `placement` object, required: Where in the DOM the rendered upsell is injected.
            - `selector` string: Selector-mode placement: CSS selector for the anchor element the upsell is inserted near. Unset when anchorKey is used.
            - `insertType` 'beforebegin' | 'afterbegin' | 'beforeend' | 'afterend': Selector-mode placement: where, relative to the anchor element, the upsell is inserted (before/after, inside start/end). Unset when anchorKey is used.
            - `anchorKey` string: Anchor-mode placement: the key a merchant gave the Intelligems Content theme app block. The upsell renders inside every block on the page carrying this key. Unset when selector is used.
            - `location` 'pdp' | 'cart', required: Semantic page context this upsell renders in (pdp or cart). Drives the plugin's activation/re-render strategy and labels/groups the upsell in analytics.
          - `template` string, required: HTML for the upsell, including all static copy written inline. The per-product card is the markup between {{#each products}} and {{/each}}. May only reference declared slots: product.* data slots and the named slots (atc, variant-select); everything else is literal HTML.
          - `maxProductLimit` integer, required: Maximum number of products to render.
          - `excludeOutOfStock` boolean, required: Exclude products whose variants are all out of stock. Defaults to true.
          - `excludeItemsInCart` boolean, required: Exclude products already in the shopper's cart. Defaults to true.
          - `excludePdpProduct` boolean, required: On a PDP, exclude the product being viewed. Defaults to true; turn it off when the viewed product belongs in the result, e.g. a bundle built around it.
          - `discount` object: Optional discount applied to products added from this upsell.
            - `discountType` 'none' | 'percentage' | 'fixed', required
            - `discountValue` number, nullable
            - `compareAtPriceDisplay` 'none' | 'compareAtPrice' | 'regularPrice', required
          - `rules` object[], required: Prioritized list of rules. Each pairs an action (which products) with targeting (when to show). v1 ships a single rule.
            - `id` string, required: Stable identifier for this rule. Owns the rule's targeting row(s) in the targeting table.
            - `priority` integer, required: Evaluation order. Lower numbers are checked first; the first rule whose targeting matches wins.
            - `action` object[], required: Which products to load when this rule matches (Shopify recommendations, specific products, collection, or tag).
              - …
            - `targeting` union, required: When this rule shows. Boolean expression over the chosen domain, evaluated to decide whether the upsell renders.
              - …
          - `agenticLogicPlacementId` string, uuid, nullable: Agentic Logic placement this upsell evaluates through. Absent means the legacy rule engine serves it — clearing the mapping is the per-surface rollback.
          - `agenticLogicRuleId` string, uuid, nullable: WRITE-SIDE intent: the Agentic Logic rule this upsell should serve. The experience save upserts the placement and the (placement, variation) assignment from it and stamps `agenticLogicPlacementId`, so callers never assemble that pair themselves. Null detaches the component and returns it to the legacy engine. Reads echo the rule currently assigned; the field is never persisted in the stored config.
        - object
          - `type` 'bundleOnsiteUpsell', required: Discriminator for the component kind.
          - `placement` object, required: Where in the DOM the rendered bundle is injected.
            - `selector` string: Selector-mode placement: CSS selector for the anchor element the upsell is inserted near. Unset when anchorKey is used.
            - `insertType` 'beforebegin' | 'afterbegin' | 'beforeend' | 'afterend': Selector-mode placement: where, relative to the anchor element, the upsell is inserted (before/after, inside start/end). Unset when anchorKey is used.
            - `anchorKey` string: Anchor-mode placement: the key a merchant gave the Intelligems Content theme app block. The upsell renders inside every block on the page carrying this key. Unset when selector is used.
            - `location` 'pdp' | 'cart', required: Semantic page context this upsell renders in (pdp or cart). Drives the plugin's activation/re-render strategy and labels/groups the upsell in analytics.
          - `template` string, required: HTML for the bundle card. The per-product row is the markup between {{#each products}} and {{/each}}; the surrounding shell holds the copy slots ({{heading}}, {{subheading}}) and the footer the whole selection shares ({{bundle.price}}, {{bundle.comparePrice}}, {{bundle.atc}}). Each row holds {{checkbox}}, {{product.image}}, {{product.url}}, {{product.title}}, {{product.price}}, {{product.compareAtPrice}} and {{variant-select}}. Every slot is required, even when editing. May only reference declared slots; everything else is literal HTML. No `<script>` tags or inline JavaScript.
          - `copy` object, required: Shopper-facing text, edited in the panel rather than inline in the template.
            - `heading` string, required: Headline above the bundle's products.
            - `subheading` string: Optional line under the heading, shown when no discount tier is active.
            - `buttonText` string, required: Label on the bundle's single add-to-cart button.
            - `rowBadgeLabel` string: Per-product discount chip. Accepts #placeholders (see BUNDLE_COPY_FIELD_VARIABLES); defaulted when omitted.
            - `savedLabel` string: Footer 'amount saved' badge. Accepts #placeholders (see BUNDLE_COPY_FIELD_VARIABLES); defaulted when omitted.
            - `sublineToNextTier` string: Subheading while adding products unlocks a better tier. Accepts #placeholders (see BUNDLE_COPY_FIELD_VARIABLES); defaulted when omitted.
            - `sublineAtTopTier` string: Subheading once the top tier is reached. Accepts #placeholders (see BUNDLE_COPY_FIELD_VARIABLES); defaulted when omitted.
          - `maxProductLimit` integer, required: Number of products the bundle offers.
          - `allowItemSelection` boolean, required: Whether the shopper can choose which of the bundle's products to add. When false every rendered product is included; exclusions can still trim how many render, so lower tiers stay reachable.
          - `excludeOutOfStock` boolean, required: Exclude products whose variants are all out of stock. Defaults to true.
          - `excludeItemsInCart` boolean, required: Exclude products already in the shopper's cart. Defaults to true.
          - `excludePdpProduct` boolean, required: On a PDP, exclude the product being viewed. Defaults to true; turn it off when the viewed product belongs in the result, e.g. a bundle built around it.
          - `discount` object: Optional count-tiered discount applied to the products added from this bundle.
            - `discountType` 'none' | 'percentage' | 'fixed', required: How the bundle discount is expressed: a percentage off, or a fixed amount off each product.
            - `discountTiers` object[], required: The discount ladder. Each tier's minimumProducts is a threshold, so a tier applies at that many selected products or more, and the highest qualifying tier wins — tiers are not cumulative. A selection below every threshold earns nothing, and a flat discount is a single tier at one product.
              - …
            - `compareAtPriceDisplay` 'none' | 'compareAtPrice' | 'regularPrice', required: Which reference price to strike through next to the discounted price.
          - `rules` object[], required: Prioritized list of rules. Each pairs an action (which products) with targeting (when to show).
            - `id` string, required: Stable identifier for this rule. Owns the rule's targeting row(s) in the targeting table.
            - `priority` integer, required: Evaluation order. Lower numbers are checked first; the first rule whose targeting matches wins.
            - `action` object[], required: Which products to load when this rule matches (Shopify recommendations, specific products, collection, or tag).
              - …
            - `targeting` union, required: When this rule shows. Boolean expression over the chosen domain, evaluated to decide whether the upsell renders.
              - …
          - `agenticLogicPlacementId` string, uuid, nullable: Agentic Logic placement this bundle selects its products through. Absent means the legacy rule engine serves it — clearing the mapping is the per-surface rollback. The engine chooses PRODUCTS only: a bundle's tiered discount always comes from `discount` below, never from the result envelope, which can only carry one flat value.
          - `agenticLogicRuleId` string, uuid, nullable: WRITE-SIDE intent: the Agentic Logic rule this bundle should serve. The experience save upserts the placement and the (placement, variation) assignment from it and stamps `agenticLogicPlacementId`, so callers never assemble that pair themselves. Null detaches the component and returns it to the legacy engine. Reads echo the rule currently assigned; the field is never persisted in the stored config. The engine chooses PRODUCTS only — a bundle's tiers always come from its own `discount`.
  - `graphs` object[]: Pre-rendered graph images. Only included when graphs are requested. When the requested output format is 'base64' (`graphs.outputFormat` on the POST endpoint, or the `graphOutput` query parameter on the deprecated GET variant), each graph includes a 'data' field with the base64-encoded PNG. Otherwise, each graph includes a 'url' field with the image URL (expires after 30 days).
    - `id` string, required
    - `key` string: The original graph key from the query parameter (e.g., 'conversion_rate', 'net_revenue_per_visitor').
    - `url` string: URL of the rendered graph image. Included when the requested output format is 'png' (the default) — that is `graphs.outputFormat` on POST /analytics/resource/{experienceId}, or the `graphOutput` query parameter on the deprecated GET variant. Expires after 30 days — download and store externally if you need to retain it longer.
    - `data` string: Base64-encoded PNG image data. Included when the requested output format is 'base64' — that is `graphs.outputFormat` on POST /analytics/resource/{experienceId}, or the `graphOutput` query parameter on the deprecated GET variant.
    - `type` string, required: Chart type for the rendered graph (e.g. 'bar').
    - `title` string, required: Display title of the rendered graph.
  - `experienceId` string, uuid
  - `experienceName` string
  - `downsample` object
    - `from` 'HOUR' | 'DAY' | 'WEEK', required
    - `to` 'HOUR' | 'DAY' | 'WEEK', required
  - `impact` object
    - `est_monthly_revenue_increase` number, nullable, required: Estimated monthly revenue increase for the best-performing non-control variation compared to the control, extrapolated to a 30-day period. Calculated as: Math.round((treatment_rpv - control_rpv) * total_visitors * (30 / test_days)), where rpv is net_revenue_per_visitor. Uses whole-variation overview metrics with the same filters and time window, including for audience views. Null for post_test views or when insufficient data is available.
  - `testResult` union: Test verdict object (verdict plus supporting fields). Present only when the testResult request param is true and a verdict is available.
    - object
      - `verdict` 'strong_win' | 'directional_win' | 'directional_loss' | 'strong_loss' | 'mixed_signals', required
      - `action_to_take` string, required
      - `runtime_days` number, required
      - `orders_per_variant` object, required
      - `primary_metric` object, required
        - `key` string, required
        - `best_challenger` object, required
          - `variant` string, required
          - `p2bb` number, nullable, required
          - `uplift` number, nullable, required
          - `uplift_ci_width` number, nullable, required
          - `stability` object, required
            - `days_held` number, nullable, required
            - `p2bb_stable` boolean, required
            - `uplift_ci_converged` boolean, required
      - `conflicting_metrics` object[], required
        - `key` string, required
        - `uplift` number, nullable, required
        - `p2bb` number, nullable, required
    - object
      - `verdict` 'filtered_strong_win' | 'filtered_directional_win' | 'filtered_directional_loss' | 'filtered_strong_loss' | 'filtered_mixed_signals', required
      - `action_to_take` string, required
      - `runtime_days` number, required
      - `orders_per_variant` object, required
      - `primary_metric` object, required
        - `key` string, required
        - `best_challenger` object, required
          - `variant` string, required
          - `p2bb` number, nullable, required
          - `uplift` number, nullable, required
          - `uplift_ci_width` number, nullable, required
          - `stability` object, required
            - `days_held` number, nullable, required
            - `p2bb_stable` boolean, required
            - `uplift_ci_converged` boolean, required
      - `conflicting_metrics` object[], required
        - `key` string, required
        - `uplift` number, nullable, required
        - `p2bb` number, nullable, required
    - object
      - `verdict` 'not_ready' | 'filtered_not_ready', required
      - `runtime_days` number, required
      - `orders_per_variant` object, required
    - object
      - `verdict` 'error', required
      - `reason` string, required

## Other responses

- `429`: Too Many Requests

## Changes

- **2026-11-06** `7b769b2f90b1`: 27 breaking, 9 warning, 46 info
  - added the new path request parameter `experienceId`
  - the response property `variations/items/offer/anyOf[subschema #1]/maximumDollarDiscount` became nullable for the status `200`
  - the response property `variations/items/offer/anyOf[subschema #1]/shippingDiscount/anyOf[subschema #1]/discountLabel` became nullable for the status `200`
  - the response property `variations/items/offer/anyOf[subschema #1]/tiers/items/discountTitle` became nullable for the status `200`
  - …78 more

[Operation history](https://skmtc.dev/intelligems/apis/intelligems-external-api-v25-10-beta/changes/v25-10-beta/analytics/resource/:experienceId/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)
