---
title: "Calculates the Minimum Detectable Effect (MDE) for a prospective experiment."
method: POST
path: "/creator-configs-public-api/v1/experimentation/universes/{universeId}/experiments:calculateMde"
tags: ["Experiments"]
---

# Calculates the Minimum Detectable Effect (MDE) for a prospective experiment.

`POST /creator-configs-public-api/v1/experimentation/universes/{universeId}/experiments:calculateMde`

Poll by clients until the operation is complete.

## Path parameters

- `universeId` integer, required

## Request body

- CalculateExperimentMdeData — Request body for `POST /v1/experimentation/universes/{universeId}/experiments:calculateMde`.
  - `exposurePercent` integer — Exposure percent in range 0-100. Percent of eligible users seeing the experiment.
  - `durationSeconds` integer — Planned duration of the experiment in whole seconds. Values must be an exact multiple of `86400`.
  - `baselineWeight` number, double — Relative weight (in [0, 100]) for the baseline (control) variant.
  - `variantWeights` number[], nullable — Relative weights (each in [0, 100]) for each non-baseline variant.
  - `universeGoalMetric` 'UNIVERSE_EXPERIMENT_METRIC_AVERAGE_SESSION_TIME' | 'UNIVERSE_EXPERIMENT_METRIC_PLAYTIME_PER_USER' | 'UNIVERSE_EXPERIMENT_METRIC_DAY_1_RETENTION' | 'UNIVERSE_EXPERIMENT_METRIC_DAY_7_RETENTION' | 'UNIVERSE_EXPERIMENT_METRIC_PAYER_CONVERSION_RATE' | 'UNIVERSE_EXPERIMENT_METRIC_AVERAGE_REVENUE_PER_USER' | 'UNIVERSE_EXPERIMENT_METRIC_AVERAGE_REVENUE_PER_PAYING_USER' — Metric tracked for a universe experiment. UNIVERSE_EXPERIMENT_METRIC_AVERAGE_SESSION_TIME UNIVERSE_EXPERIMENT_METRIC_PLAYTIME_PER_USER UNIVERSE_EXPERIMENT_METRIC_DAY_1_RETENTION UNIVERSE_EXPERIMENT_METRIC_DAY_7_RETENTION UNIVERSE_EXPERIMENT_METRIC_PAYER_CONVERSION_RATE UNIVERSE_EXPERIMENT_METRIC_AVERAGE_REVENUE_PER_USER UNIVERSE_EXPERIMENT_METRIC_AVERAGE_REVENUE_PER_PAYING_USER
  - `targetingCriteria` TargetingCriteria — Eligibility criteria scoping which users an experiment can apply to.
    - `rule` ConditionalRuleDefinition — JSON shape of an RPN conditional rule in public API requests.
      - `tokens` RpnTokenDto[], nullable — Postfix RPN token sequence.
        - `operator` string, nullable
        - `operand` RpnOperandDto — RPN operand: attribute reference or literal value.
          - `attributeReference` string, nullable
          - `literalValue` LiteralValueDto — Literal constant for an RPN operand.
            - `booleanValue` string, nullable
            - `integerValue` string, nullable
            - `doubleValue` string, nullable
            - `stringValue` string, nullable

## Response `200`

OK

- CalculateExperimentMdeResponse — Response body for `POST /v1/experimentation/universes/{universeId}/experiments:calculateMde`.
  - `operation` MdeOperation — Async operation result for a `:calculateMde` call. When Done is true exactly one of Error or Mde is set; when false, neither is.
    - `operationId` string, nullable — Stable operation ID.
    - `lastModifiedTime` string, nullable — UTC time the operation was last modified.
    - `done` boolean — True once the calculation terminates (success or failure).
    - `error` ExperimentApiError — Application-layer error emitted on a failed experiment operation.
      - `errorType` 'EXPERIMENT_API_ERROR_TYPE_INVALID_VARIANT_CONFIGURATION' | 'EXPERIMENT_API_ERROR_TYPE_INVALID_VARIANT_LABEL' | 'EXPERIMENT_API_ERROR_TYPE_MUST_HAVE_EXACTLY_ONE_BASELINE_VARIANT' | 'EXPERIMENT_API_ERROR_TYPE_MATCHMAKING_OVERLAPPING_RUNTIME' | 'EXPERIMENT_API_ERROR_TYPE_MATCHMAKING_INVALID_SCORING_CONFIGURATIONS' | 'EXPERIMENT_API_ERROR_TYPE_MATCHMAKING_UNEXPECTED_PRODUCT_TYPE' | 'EXPERIMENT_API_ERROR_TYPE_MATCHMAKING_EMPTY_CONFIGURATION' | 'EXPERIMENT_API_ERROR_TYPE_MATCHMAKING_EMPTY_VARIANT_METADATA' | 'EXPERIMENT_API_ERROR_TYPE_MATCHMAKING_VARIANT_WEIGHT_MUST_BE_POSITIVE' | 'EXPERIMENT_API_ERROR_TYPE_MATCHMAKING_VARIANT_WEIGHTS_UNBALANCED' | 'EXPERIMENT_API_ERROR_TYPE_MATCHMAKING_PLACE_CONFIG_REQUIRES_SCORING_ID_OR_DEFAULT' | 'EXPERIMENT_API_ERROR_TYPE_CONFIGS_MISSING_VARIANT' | 'EXPERIMENT_API_ERROR_TYPE_CONFIGS_VARIANT_MISSING_KEY' | 'EXPERIMENT_API_ERROR_TYPE_CONFIGS_VARIANT_MISSING_VALUE' | 'EXPERIMENT_API_ERROR_TYPE_CONFIGS_KEY_ALREADY_IN_USE' | 'EXPERIMENT_API_ERROR_TYPE_SYSTEM_ERROR' | 'EXPERIMENT_API_ERROR_TYPE_EXPERIMENT_RESULTS_NOT_FOUND' | 'EXPERIMENT_API_ERROR_TYPE_INVALID_TARGETING_CRITERIA' | 'EXPERIMENT_API_ERROR_TYPE_TARGETING_NOT_ALLOWED' | 'EXPERIMENT_API_ERROR_TYPE_INVALID_DURATION' | 'EXPERIMENT_API_ERROR_TYPE_CONFIGS_VARIANT_CONFIG_NOT_FOUND' | 'EXPERIMENT_API_ERROR_TYPE_INVALID_EXPERIMENT_NAME' | 'EXPERIMENT_API_ERROR_TYPE_CONDITIONAL_CONFIG_REQUIRES_NULL_BASELINE' | 'EXPERIMENT_API_ERROR_TYPE_MATCHMAKING_CONTROL_VARIANT_MUST_MATCH_CURRENT_CONFIGURATION' | 'EXPERIMENT_API_ERROR_TYPE_MATCHMAKING_VARIANTS_MUST_COVER_SAME_PLACES' | 'EXPERIMENT_API_ERROR_TYPE_MATCHMAKING_VARIANT_HAS_DUPLICATE_PLACES' — Validation failures. EXPERIMENT_API_ERROR_TYPE_INVALID_VARIANT_CONFIGURATION EXPERIMENT_API_ERROR_TYPE_INVALID_VARIANT_LABEL EXPERIMENT_API_ERROR_TYPE_MUST_HAVE_EXACTLY_ONE_BASELINE_VARIANT EXPERIMENT_API_ERROR_TYPE_MATCHMAKING_OVERLAPPING_RUNTIME EXPERIMENT_API_ERROR_TYPE_MATCHMAKING_INVALID_SCORING_CONFIGURATIONS EXPERIMENT_API_ERROR_TYPE_MATCHMAKING_UNEXPECTED_PRODUCT_TYPE EXPERIMENT_API_ERROR_TYPE_MATCHMAKING_EMPTY_CONFIGURATION EXPERIMENT_API_ERROR_TYPE_MATCHMAKING_EMPTY_VARIANT_METADATA EXPERIMENT_API_ERROR_TYPE_MATCHMAKING_VARIANT_WEIGHT_MUST_BE_POSITIVE EXPERIMENT_API_ERROR_TYPE_MATCHMAKING_VARIANT_WEIGHTS_UNBALANCED EXPERIMENT_API_ERROR_TYPE_MATCHMAKING_PLACE_CONFIG_REQUIRES_SCORING_ID_OR_DEFAULT EXPERIMENT_API_ERROR_TYPE_CONFIGS_MISSING_VARIANT EXPERIMENT_API_ERROR_TYPE_CONFIGS_VARIANT_MISSING_KEY EXPERIMENT_API_ERROR_TYPE_CONFIGS_VARIANT_MISSING_VALUE EXPERIMENT_API_ERROR_TYPE_CONFIGS_KEY_ALREADY_IN_USE EXPERIMENT_API_ERROR_TYPE_SYSTEM_ERROR EXPERIMENT_API_ERROR_TYPE_EXPERIMENT_RESULTS_NOT_FOUND EXPERIMENT_API_ERROR_TYPE_INVALID_TARGETING_CRITERIA EXPERIMENT_API_ERROR_TYPE_TARGETING_NOT_ALLOWED EXPERIMENT_API_ERROR_TYPE_INVALID_DURATION EXPERIMENT_API_ERROR_TYPE_CONFIGS_VARIANT_CONFIG_NOT_FOUND EXPERIMENT_API_ERROR_TYPE_INVALID_EXPERIMENT_NAME EXPERIMENT_API_ERROR_TYPE_CONDITIONAL_CONFIG_REQUIRES_NULL_BASELINE EXPERIMENT_API_ERROR_TYPE_MATCHMAKING_CONTROL_VARIANT_MUST_MATCH_CURRENT_CONFIGURATION EXPERIMENT_API_ERROR_TYPE_MATCHMAKING_VARIANTS_MUST_COVER_SAME_PLACES EXPERIMENT_API_ERROR_TYPE_MATCHMAKING_VARIANT_HAS_DUPLICATE_PLACES
      - `errorCode` string, nullable — Stable machine-readable error code.
      - `errorMessage` string, nullable — Human-readable description of the failure.
      - `errorContext` object, nullable — Optional structured context about the failure (field paths, offending values, etc.).
    - `mde` MdeResult — MDE calculation result. Returned in the `operation.result` field on a successful `POST .../experiments:calculateMde` call.
      - `totalSampleSize` integer — Estimated total sample size required for the experiment.
      - `mdeRelativePercentages` number[], nullable — MDE expressed as a relative percentage of the goal metric, per non-baseline variant.
      - `minimumSampleSizeThreshold` integer — Below this sample-size threshold the MDE estimate is unreliable.

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `404` — Not Found

---

[API](https://skmtc.net/roblox/apis/roblox-api.md) · [All operations](https://skmtc.net/roblox/apis/roblox-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/roblox/roblox-api/revisions/958b2b40425d/schema)
