---
title: "GET /api/{org_id}/experiments/{experiment_id}"
method: GET
path: "/api/{org_id}/experiments/{experiment_id}"
tags: ["Experiments"]
---

# GET /api/{org_id}/experiments/{experiment_id}

`GET /api/{org_id}/experiments/{experiment_id}`

## Request

- Base URL: `https://api.openobserve.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.openobserve.ai/api/{org_id}/experiments/{experiment_id}`
- Auth: API key in header `Authorization`
- TypeScript: <https://skmtc.dev/openobserve/apis/openobserve-api-http/docs/api/:org_id/experiments/:experiment_id/get.ts> (a function with typed inputs; its response is checked against the schema)

## Path parameters

- `org_id` string, required
- `experiment_id` string, required

## Query parameters

- `sampleSize` integer, nullable
- `resultPage` integer, nullable
- `resultPageSize` integer, nullable

## Response `200`

- object
  - `experiment` ExperimentViewResponseBody, nullable, required
    - `createdAt` integer, required
    - `createdBy` string, required
    - `datasetFilter` DatasetSnapshotFilterBody
      - `logicalIds` string[]
      - `metadata` object
      - `sources` DatasetItemSourceBody[]
      - `tags` string[]
    - `datasetId` string, required
    - `datasetName` string, nullable: Resolved from the Dataset the experiment pinned, so callers do not have to fetch the Dataset list just to label a run. None when it was deleted.
    - `datasetVersion` integer, required: The pinned `global_version`: the row cut every Slot reads.
    - `datasetWriteVersion` integer, required: The Dataset version to display for that pin: one per write request.
    - `deadlineAt` integer, required
    - `description` string, nullable
    - `executionCompletedAt` integer, nullable
    - `executionStatus` 'pending' | 'running' | 'completed' | 'failed' | 'cancelled', required
    - `executionStatusReason` string, nullable
    - `id` string, required
    - `idempotencyKey` string, nullable
    - `isBaseline` boolean, required: The organization's Baseline for this Dataset. At most one Experiment per organization and Dataset carries it.
    - `lifecycleVersion` integer, required
    - `metadata` unknown
    - `name` string, required
    - `orgId` string, required
    - `promptContentHash` string, nullable
    - `promptId` string, nullable
    - `promptName` string, nullable
    - `promptVersion` integer, nullable
    - `retryCount` integer, required
    - `scorers` PinnedExperimentScorerBody[], required
      - `id` string, required
      - `version` integer, required
    - `task` union, required
      - object
        - `messages` PromptMessageBody[], required
          - `content` string, required
          - `role` string, required
        - `model` string, nullable
        - `params` unknown
        - `provider_id` string, required
        - `type` 'inline_prompt', required
      - object
        - `id` string, required
        - `params_overrides` PromptRefOverridesBody
          - `model` string, nullable
          - `params` unknown
          - `responseFormat` unknown
          - `tools` unknown
        - `provider_id` string, required
        - `type` 'prompt_ref', required
        - `version` integer, required
      - object
        - `overrides` RemoteTaskOverridesBody: The two runtime overrides an Experiment may set on a registered Remote Task.
          - `maxConcurrency` integer, nullable
          - `timeoutMs` integer, nullable
        - `task_ref` string, required: Pinned `name@version` of a published Remote Task. Never latest.
        - `type` 'remote', required
      - object
        - `config` unknown
        - `task_fingerprint` string, required: Immutable identity of the customer code under evaluation. Every execution record reported for this Experiment must repeat it.
        - `type` 'sdk', required
    - `trialCount` integer, required
    - `aggregateSummary` ExperimentAggregateSummaryBody
      - `costIncomplete` boolean, required
      - `errorTaskSlots` integer, required
      - `failureCauseCount` integer, required: Distinct failure causes across every errored slot.
      - `failureCauses` ExperimentFailureCauseBody[], required: Top 3 failure causes, largest first: errored slots grouped by kind, by first line if none.
        - `kind` string, nullable: Shared failure taxonomy (`provider_auth`, `timeout`, `execution_error`, …); absent when the producer did not classify the failure, including current SDK/client paths.
        - `message` string, required: The group's most common first error line.
        - `slotCount` integer, required
      - `incomplete` boolean, required
      - `incompleteScoreDimensions` integer, required
      - `incompleteTaskSlots` integer, required
      - `p50LatencyMs` integer, nullable
      - `scoringCost` number, double, nullable
      - `taskCost` number, double, required
      - `totalCost` number, double, required
    - `executionProgress` ExperimentProgressBody
      - `completed` integer, required
      - `skipped` integer, required
      - `total` integer, required
    - `scoreOutcomes` ExperimentScoreOutcomesBody: `completed` is scored plus failed; `total` also counts pending, skipped and unscored.
      - `completed` integer, required
      - `failed` integer, required
      - `pending` integer, required
      - `scored` integer, required
      - `skipped` integer, required
      - `total` integer, required
      - `unscored` integer, required
    - `scoreSummaries` ExperimentScoreSummaryBody[], nullable
      - `errorCount` integer, required
      - `name` string, required: User-facing dimension label. This is the Score Config name when the Scorer declares one, otherwise the Scorer name.
      - `noReferenceCount` integer, required
      - `noTraceCount` integer, required
      - `pendingCount` integer, required
      - `sampleCount` integer, required
      - `scoreConfigId` string, nullable
      - `scoreConfigName` string, nullable
      - `scoreConfigVersion` integer, nullable
      - `scorerId` string, required
      - `scorerVersion` integer, required
      - `skippedCount` integer, required
      - `value` unknown
    - `scoringProgress` ExperimentProgressBody
      - `completed` integer, required
      - `skipped` integer, required
      - `total` integer, required
    - `scoringStatus` string, nullable
    - `status` 'pending' | 'running' | 'scoring' | 'completed' | 'cancelled' | 'execution_failed' | 'scoring_failed'
    - `taskOutcomes` ExperimentTaskOutcomesBody: Slot counts over the pinned set; `pending` is `total` minus the slots that have finished.
      - `failed` integer, required
      - `pending` integer, required
      - `skipped` integer, required
      - `succeeded` integer, required
      - `total` integer, required
  - `preview` ExperimentPreviewResponseBody, required
    - `applicability` ExperimentApplicabilityPreviewBody, required
      - `eligibleScoringDimensionCount` integer, required
      - `eligibleTaskSlotCount` integer, required: Slots with at least one applicable Score Dimension — a scoring-side figure for the applicability preview, not a Task denominator.
      - `fullySkippedRowCount` integer, required
      - `fullySkippedSlotCount` integer, required
      - `partiallySkippedRowCount` integer, required
      - `partiallySkippedSlotCount` integer, required
      - `scorerApplicability` ExperimentScorerApplicabilityBody[], required
        - `eligibleRowCount` integer, required
        - `eligibleSlotCount` integer, required
        - `noReferenceRowCount` integer, required
        - `noReferenceSlotCount` integer, required
        - `scorerId` string, required
        - `scorerVersion` integer, required
      - `totalSlotCount` integer, required: Every pinned Slot, which is what Task progress counts against: a Slot runs whether or not a Scorer can judge it.
    - `costEstimate` ExperimentCostEstimateBody
      - `confirmationRequired` boolean, required: Creation of this plan requires `confirmCostEstimate: true`.
      - `currency` string, required
      - `dimensions` ExperimentCostDimensionBody[], required
        - `callCount` integer, required
        - `estimatedCost` number, double, nullable: Absent when no price is known for this model.
        - `inputTokensPerCall` integer, required
        - `model` string, nullable
        - `outputTokensPerCall` integer, required
        - `scorerId` string, nullable
        - `scorerVersion` integer, nullable
      - `estimatedCost` number, double, nullable: Sum of the dimensions that could be priced. Absent when none could.
      - `incomplete` boolean, required: At least one dimension had no known price, so the total is a floor.
      - `slotCount` integer, required
      - `taskCostEstimated` boolean, required: Whether the Task side is included. `false` for Remote and SDK Tasks, which run in the customer's own environment.
      - `warningThreshold` number, double, required
    - `datasetId` string, required
    - `datasetVersion` integer, required
    - `pinnedScorers` PinnedExperimentScorerBody[], required
      - `id` string, required
      - `version` integer, required
    - `rowCount` integer, required
    - `sampleSlots` ExperimentSlotBody[], required
      - `expectedOutput` unknown
      - `input` unknown, required
      - `logicalId` string, required
      - `metadata` unknown
      - `rowId` string, required
      - `trialIndex` integer, required
    - `slotCount` integer, required
    - `trialCount` integer, required
  - `results` ExperimentResultsResponseBody, required
    - `clientScoreSummaries` ExperimentClientScoreSummaryBody[], required: Dimensions the customer's own code reported. Empty for a run whose Scores all came from platform Scorers.
      - `clientScorerKey` string, required
      - `sampleCount` integer, required
      - `scoreConfigId` string, required
      - `scoreConfigName` string, required
      - `value` unknown
    - `dispersionSummary` ExperimentDispersionSummaryBody, required
      - `highDispersionRowCount` integer, required: The "N cases unstable" card, counted over every pinned case.
      - `threshold` number, double, required: Normalized dispersion a case must exceed to be flagged.
    - `executions` unknown[], required
      - unknown
    - `pagination` ExperimentResultPaginationBody, required
      - `hasMore` boolean, required
      - `page` integer, required
      - `pageSize` integer, required
      - `totalSlots` integer, required
    - `rowDispersions` ExperimentRowDispersionBody[], required: Trial dispersion for the cases on this page, always measured over the Experiment's full evidence so paging never splits a case's trials.
      - `dimensions` ExperimentDimensionDispersionBody[], required
        - `consensus` unknown, required
        - `normalized` number, double, nullable: Internal cross-dimension key in `[0, 1]`. Absent when the dimension declares no valid range, which also keeps it out of row flagging.
        - `outlierTrialIndex` integer, nullable
        - `rawStd` number, double, nullable: Raw standard deviation in the dimension's own units, numeric only.
        - `scorerId` string, required
        - `scorerVersion` integer, required
        - `trialCount` integer, required
      - `high` boolean, required
      - `logicalId` string, required
      - `maxNormalized` number, double, nullable: Largest normalized dispersion across this case's dimensions. This is the key the result table flags and sorts by.
      - `outlierTrialIndex` integer, nullable
      - `rowId` string, required
    - `scores` unknown[], required
      - unknown
    - `skipSummary` ExperimentSkipSummaryBody, required
      - `fullySkippedSlots` integer, required
      - `noReferenceDimensions` integer, required
      - `noTraceDimensions` integer, required
      - `partiallySkippedSlots` integer, required
      - `skippedDimensions` integer, required
    - `slots` ExperimentResultSlotBody[], required
      - `clientScores` unknown[], required: Scores the customer's own code reported for this Slot. `scores` above is one entry per pinned Scorer, which a client Score is not.
        - unknown
      - `execution` unknown
      - `expectedOutput` unknown
      - `input` unknown, required
      - `logicalId` string, required
      - `rowId` string, required
      - `scores` ExperimentResultScoreBody[], required
        - `score` unknown
        - `scorerId` string, required
        - `scorerVersion` integer, required
        - `status` 'pending' | 'in_progress' | 'success' | 'skipped' | 'error', required
      - `status` 'pending' | 'running' | 'scoring' | 'completed' | 'skipped' | 'task_failed' | 'score_failed', required
      - `taskStatus` 'pending' | 'queued' | 'in_progress' | 'ok' | 'skipped' | 'error', required
      - `trialIndex` integer, required

## Other responses

- `404`: Experiment not found

---

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