---
title: "Gets the status of an experiment async operation."
method: GET
path: "/creator-configs-public-api/v1/experimentation/universes/{universeId}/operations/{operationId}"
tags: ["Experiments"]
---

# Gets the status of an experiment async operation.

`GET /creator-configs-public-api/v1/experimentation/universes/{universeId}/operations/{operationId}`

## Request

- Base URL: `https://apis.roblox.com`
- URL: `https://apis.roblox.com/creator-configs-public-api/v1/experimentation/universes/{universeId}/operations/{operationId}`
- Auth: one of:
  - API key in cookie `.ROBLOSECURITY`
  - API key in header `x-api-key`
  - OAuth 2
    - Authorization code: `https://apis.roblox.com/oauth/v1/authorize`
    - Token URL: `https://apis.roblox.com/oauth/v1/token` scopes: `universe:read`

Polled by clients between mutations (Create / Update / Start / Schedule /
Complete / Discard) to determine when the operation reaches `done = true`.

## Path parameters

- `universeId` integer, required
- `operationId` string, required

## Response `200`

OK

- GetExperimentOperationStatusResponse: Response body for `GET /v1/experimentation/universes/{universeId}/operations/{operationId}`.
  - `operation` ExperimentOperation: Async operation result for an experiment Create / Update / Discard call. When Done is true, at most one of Error or Experiment is set; when false, neither is. A successful delete is the one case where a done operation carries neither: the experiment no longer exists, so no Experiment body is returned.
    - `operationId` string, nullable: Stable operation ID.
    - `status` 'OPERATIONAL_STATUS_READY' | 'OPERATIONAL_STATUS_CREATING' | 'OPERATIONAL_STATUS_UPDATING' | 'OPERATIONAL_STATUS_STARTING' | 'OPERATIONAL_STATUS_STOPPING' | 'OPERATIONAL_STATUS_SCHEDULING' | 'OPERATIONAL_STATUS_DELETING' | 'OPERATIONAL_STATUS_RAMPING_UP' | 'OPERATIONAL_STATUS_SYNCING' | 'OPERATIONAL_STATUS_ROLLING_OUT': Current operational status reported on an experiment or an async operation performed on one. OPERATIONAL_STATUS_READY OPERATIONAL_STATUS_CREATING OPERATIONAL_STATUS_UPDATING OPERATIONAL_STATUS_STARTING OPERATIONAL_STATUS_STOPPING OPERATIONAL_STATUS_SCHEDULING OPERATIONAL_STATUS_DELETING OPERATIONAL_STATUS_RAMPING_UP OPERATIONAL_STATUS_SYNCING OPERATIONAL_STATUS_ROLLING_OUT
    - `createdTime` string, date-time: UTC time the operation was created.
    - `done` boolean: True once the operation terminates (success or failure). When false, neither Error nor Experiment is populated.
    - `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' | 'EXPERIMENT_API_ERROR_TYPE_CONFIGS_KEY_HAS_RESERVED_PREFIX': 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 EXPERIMENT_API_ERROR_TYPE_CONFIGS_KEY_HAS_RESERVED_PREFIX
      - `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.).
    - `experiment` ProductExperiment: Config-based experiment for a given product. Returned by the Get endpoint and embedded in a successful experiment operation.
      - `id` string, nullable: Experiment ID.
      - `name` string, nullable: Experiment display name.
      - `description` string, nullable: Experiment description.
      - `createdTime` string, date-time: UTC time the experiment was created.
      - `lastUpdatedTime` string, date-time, nullable: UTC time the experiment was last updated.
      - `startedTime` string, date-time, nullable: UTC time the experiment was started (running), if it has been.
      - `stoppedTime` string, date-time, nullable: UTC time the experiment was stopped, if it has been.
      - `state` 'EXPERIMENT_STATE_DRAFT' | 'EXPERIMENT_STATE_SCHEDULED' | 'EXPERIMENT_STATE_RUNNING' | 'EXPERIMENT_STATE_COMPLETED' | 'EXPERIMENT_STATE_CANCELLED' | 'EXPERIMENT_STATE_DELETED': Lifecycle state of an experiment. EXPERIMENT_STATE_DRAFT EXPERIMENT_STATE_SCHEDULED EXPERIMENT_STATE_RUNNING EXPERIMENT_STATE_COMPLETED EXPERIMENT_STATE_CANCELLED EXPERIMENT_STATE_DELETED
      - `experimentConfiguration` ExperimentConfiguration: Union of per-product experiment configurations. At most one of InGameConfigExperimentConfiguration or MatchmakingExperimentConfiguration may be set.
        - `productType` 'EXPERIMENT_PRODUCT_TYPE_IN_GAME_CONFIGS' | 'EXPERIMENT_PRODUCT_TYPE_MATCHMAKING': Type of product the experiment is targeting. EXPERIMENT_PRODUCT_TYPE_IN_GAME_CONFIGS EXPERIMENT_PRODUCT_TYPE_MATCHMAKING
        - `inGameConfigExperimentConfiguration` InGameConfigExperimentConfiguration: Configuration for an in-game-config experiment.
          - `variants` SingleConfigExperimentVariant[], nullable: Variants participating in the experiment. Exactly one must have IsBaseline set.
            - `variantMeta` VariantMeta: Metadata shared by every experiment variant.
              - …
            - `configEntry` ExperimentConfigEntry
              - …
        - `matchmakingExperimentConfiguration` MatchmakingExperimentConfiguration: Configuration for a matchmaking experiment.
          - `variants` MatchmakingExperimentVariant[], nullable: Variants participating in the experiment.
            - `variantMeta` VariantMeta: Metadata shared by every experiment variant.
              - …
            - `placeMatchmakingConfigs` PlaceScoringConfig[], nullable: Per-place matchmaking scoring configurations applied when this variant is selected.
              - …
      - `exposurePercent` integer: Exposure percent in range 0-100.
      - `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` 'OPERATOR_AND' | 'OPERATOR_OR' | 'OPERATOR_NOT' | 'OPERATOR_EQ' | 'OPERATOR_NE' | 'OPERATOR_GT' | 'OPERATOR_LT' | 'OPERATOR_GTE' | 'OPERATOR_LTE' | 'OPERATOR_IN' | 'OPERATOR_NIN': RPN token operator values for public HTTP JSON, aligned with `roblox.creatorexperienceconfig.conditionrules.v1.Operator` numeric values `1`–`11`. The proto `OPERATOR_INVALID` (`0`) is not exposed here; unknown or invalid operators are rejected at deserialization. JSON uses proto symbolic names (`OPERATOR_AND`, …) via Google.Protobuf.Reflection.OriginalNameAttribute. OPERATOR_AND OPERATOR_OR OPERATOR_NOT OPERATOR_EQ OPERATOR_NE OPERATOR_GT OPERATOR_LT OPERATOR_GTE OPERATOR_LTE OPERATOR_IN OPERATOR_NIN
            - `operand` RpnOperandDto: RPN operand: attribute reference or literal value.
              - …
      - `operationalStatus` 'OPERATIONAL_STATUS_READY' | 'OPERATIONAL_STATUS_CREATING' | 'OPERATIONAL_STATUS_UPDATING' | 'OPERATIONAL_STATUS_STARTING' | 'OPERATIONAL_STATUS_STOPPING' | 'OPERATIONAL_STATUS_SCHEDULING' | 'OPERATIONAL_STATUS_DELETING' | 'OPERATIONAL_STATUS_RAMPING_UP' | 'OPERATIONAL_STATUS_SYNCING' | 'OPERATIONAL_STATUS_ROLLING_OUT': Current operational status reported on an experiment or an async operation performed on one. OPERATIONAL_STATUS_READY OPERATIONAL_STATUS_CREATING OPERATIONAL_STATUS_UPDATING OPERATIONAL_STATUS_STARTING OPERATIONAL_STATUS_STOPPING OPERATIONAL_STATUS_SCHEDULING OPERATIONAL_STATUS_DELETING OPERATIONAL_STATUS_RAMPING_UP OPERATIONAL_STATUS_SYNCING OPERATIONAL_STATUS_ROLLING_OUT
      - `createdBy` string, nullable: User ID of the creator of the experiment.
      - `scheduledTime` string, date-time, nullable: UTC time the experiment is scheduled to start, if scheduled.
      - `durationSeconds` integer: Experiment duration in whole seconds.
      - `universeMetricConfiguration` UniverseMetricConfiguration: Metric configuration for an experiment.
        - `goalMetric` '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
        - `learningMetrics` UniverseExperimentMetric[], nullable: Learning (observation-only) metrics.

## Other responses

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

## Changes

- **2026-10-22** `bcfdc20689cd`: 4 breaking, 1 info
  - the `operation/allOf[#/components/schemas/ExperimentOperation]/experiment/allOf[#/components/schemas/ProductExperiment]/targetingCriteria/allOf[#/components/schemas/TargetingCriteria]/rule/allOf[#/components/schemas/ConditionalRuleDefinition]/tokens/items/operand/allOf[#/components/schemas/RpnOperandDto]/literalValue/allOf[#/components/schemas/LiteralValueDto]/booleanValue` response's property type changed from `string` to `boolean` for status `200`
  - the `operation/allOf[#/components/schemas/ExperimentOperation]/experiment/allOf[#/components/schemas/ProductExperiment]/targetingCriteria/allOf[#/components/schemas/TargetingCriteria]/rule/allOf[#/components/schemas/ConditionalRuleDefinition]/tokens/items/operand/allOf[#/components/schemas/RpnOperandDto]/literalValue/allOf[#/components/schemas/LiteralValueDto]/doubleValue` response's property type changed from `string` to `number`, and format from no format to `double` for status `200`
  - the `operation/allOf[#/components/schemas/ExperimentOperation]/experiment/allOf[#/components/schemas/ProductExperiment]/targetingCriteria/allOf[#/components/schemas/TargetingCriteria]/rule/allOf[#/components/schemas/ConditionalRuleDefinition]/tokens/items/operand/allOf[#/components/schemas/RpnOperandDto]/literalValue/allOf[#/components/schemas/LiteralValueDto]/integerValue` response's property type changed from `string` to `integer`, and format from no format to `int64` for status `200`
  - the `operation/allOf[#/components/schemas/ExperimentOperation]/experiment/allOf[#/components/schemas/ProductExperiment]/targetingCriteria/allOf[#/components/schemas/TargetingCriteria]/rule/allOf[#/components/schemas/ConditionalRuleDefinition]/tokens/items/operator` response's property type changed from `string` to no type for status `200`
  - …1 more
- …earlier changes not shown

[Operation history](https://skmtc.dev/roblox/apis/roblox-api/changes/creator-configs-public-api/v1/experimentation/universes/:universeId/operations/:operationId/get.md)

---

[API](https://skmtc.dev/roblox/apis/roblox-api.md) - [All operations](https://skmtc.dev/roblox/apis/roblox-api/llms.txt) - [OpenAPI document](https://skmtc.dev/roblox/apis/roblox-api/revisions/bcfdc20689cd?raw)
