---
title: "Retrieve a test run"
method: GET
path: "/test_framework/v2/runs/{id}/"
tags: ["test_framework"]
---

# Retrieve a test run

`GET /test_framework/v2/runs/{id}/`

## Request

- Base URL: `https://api.cekura.ai`
- URL: `https://api.cekura.ai/test_framework/v2/runs/{id}/`
- Auth: one of:
  - API key in header `X-CEKURA-API-KEY`
  - HTTP bearer
  - HTTP bearer
  - API key in header `X-VOCERA-SHAREABLE-LINK-TOKEN`
  - HTTP bearer

Retrieve one run by `run_id` (the integer path parameter), including its transcript, metric evaluations and error message.

Prefer this over `bulk` whenever you want a single run: `bulk` takes a comma-separated `run_ids` plus a scope parameter, so it is easy to widen by accident into every run of a result. The `call_id` field on the response is the provider's call identifier (a string) — do NOT pass it where `run_id` is expected.

## Path parameters

- `id` integer, required

## Response `200`

- Run
  - `id` integer
  - `provider_call_id` string: Call ID from the Assistant provider Example: `call_abc123`
  - `trace_id` string: OpenTelemetry trace ID (32-char hex). Set when OTel tracing is enabled.
  - `is_log_present` boolean: Whether provider execution logs are stored for this run.
  - `scenario` integer, nullable
  - `scenario_name` string
  - `scenario_type` string: Type of the run's scenario (e.g. instruction, conditional_actions), null if the scenario was deleted
  - `personality` integer, nullable: Personality this run belongs to
  - `personality_name` string: Name of the personality this run belongs to
  - `agent` integer: ID of the agent associated with this run
  - `agent_name` string: Name of the agent associated with this run
  - `agent_version` AgentVersionSummary
    - `history_id` integer, required: History record ID of the agent version
    - `version_id` string, nullable, required: Version label, e.g. "v12"
    - `version_name` string, nullable, required: Optional name given to the version
    - `is_current` boolean, required: Whether this is the agent's current version
  - `result_id` integer
  - `result_name` string: Name of the result this run belongs to
  - `expected_outcome_prompt` string
  - `expected_outcome` ExpectedOutcome
    - `score` number, double, required: Score of the expected outcome
    - `explanation` string[], required
    - `outcome_alignments` OutcomeAlignment[], required
      - `outcome` string, required: Outcome of the expected outcome
      - `prompt_part` string, required: Prompt part of the expected outcome
      - `aligned` boolean, required: Whether the outcome aligns with the prompt part
  - `evaluation` Evaluation
    - `metrics` CallLogListSerializerMetricsWithExplanation[], required
      - `id` integer, required: Metric ID
      - `name` string, required: Metric name
      - `type` string, required: Metric type
      - `score` number, double, required: Evaluated metric score, Present if metrictype is not enum
      - `enum` string, required: Metric enum, Present if type is enum
      - `value` string, required: Evaluated metric value, Present if metric type is enum
      - `explanation` string[], required
      - `extra` object, required: Evaluated metric extra data
  - `rubric` unknown
  - `transcript` string: Full text transcript of the call. Example: ```text [00:01] Testing Agent: Hello. [00:02] Main Agent: Hello, how can I help you today? [00:03] Testing Agent: Well, I mean, sure. What time exactly are we talking about here [00:04] Main Agent: 6 PM. [00:05] Testing Agent: Great. I'll book that for you. Just a sec. [00:06] Main Agent: Okay. ```
  - `transcript_object` RunListTranscriptObject[]: Transcript object
    - `role` string, required: Role of the message
    - `content` string, required: Content of the message
    - `timestamp` number, double, required: Timestamp of the message
    - `normalized_content` string, required: Backend comparison key for the full turn
    - `comparison_spans` unknown[], required: Raw multilingual-number spans with backend comparison keys
      - unknown
  - `duration` string: Duration of the run in MM:SS format
  - `voice_recording_url` string: URL to access the voice recording of this run
  - `email_id` string, email, nullable
  - `status` 'running' | 'completed' | 'failed' | 'pending' | 'in_progress' | 'evaluating' | 'in_queue' | 'timeout' | 'cancelled' | 'scaling_up': * `running` - Running * `completed` - Completed * `failed` - Failed * `pending` - Pending * `in_progress` - In Progress * `evaluating` - Evaluating * `in_queue` - In Queue * `timeout` - Timeout * `cancelled` - Cancelled * `scaling_up` - Scaling Up
  - `evaluation_status` 'success' | 'failure' | 'reviewed_success' | 'reviewed_failure': * `success` - Success * `failure` - Failure * `reviewed_success` - Reviewed Success * `reviewed_failure` - Reviewed Failure
  - `metadata` unknown
  - `success` boolean: Whether this run passed its quality evaluation. false means either the call failed to connect or an evaluation check did not pass. Check `error_message` for connection failures and `evaluation` for check results.
  - `is_reviewed` boolean: Whether the call has been reviewed. Example: `true` or `false`
  - `feedback` string
  - `timestamp` string, date-time
  - `executed_at` string, date-time, nullable
  - `outbound_number` string: Phone number used to make the outbound call for this run
  - `inbound_number` string: Phone number used to receive the inbound call for this run
  - `critical_categories` RunListCriticalCategories[]: List of critical evaluation categories and their results for this run
    - `category_id` integer, required: Category ID
    - `category` string, required: Category name
    - `deviation` number, double, required: Deviation
    - `wrongly_marked` boolean, required: Whether the category was wrongly marked
    - `feedback` string, required: Feedback
    - `priority` 'critical' | 'non-critical' | 'not_a_bug', required: Priority * `critical` - Critical * `non-critical` - Non Critical * `not_a_bug` - Not A Bug
  - `error_message` string
  - `scenario_instructions` string
  - `run_as_text` boolean
  - `test_profile_data` TestProfileData
    - `id` integer, required: Test Profile ID
    - `name` string, required: Test Profile name
    - `information` object, required: Information of the test profile Example: ```json { "user_name": "John Doe", "user_email": "john.doe@example.com", } ```
  - `generated_mock_tool_entries` object[]: Expected mock tool calls for this run's evaluator. Each entry has shape {tool_id, tool_name, new_entry: {input, output, response?}}.
  - `mocked_tool_names` string[]: Tool names whose calls in this run's transcript were served by Cekura mocks. Where the provider reports the URL it resolved per tool call (ElevenLabs), a mock-enabled tool the provider served from the customer's own endpoint is excluded; otherwise this is the set that was mock-enabled. Empty if no tools were mocked.
  - `provider_call_details` unknown
  - `agent_number` string, nullable: Phone number of the agent (only for voice inbound calls)
  - `testing_channel_index` integer, nullable: The channel index of the testing agent in the audio recording
  - `waveform` object: Amplitude envelope of the recording, one array of values per audio channel, so a waveform can be drawn without downloading the audio. Null for recordings processed before peaks were stored.
  - `run_type` string, nullable: Run Execution Type
  - `outbound_dial_window_opens_at` string: ISO timestamp when the outbound dial window opened. Null until the run reaches pending/waiting-for-call.
  - `outbound_dial_window_seconds` string: Duration of the outbound dial window in seconds.
  - `outbound_dial_window_closes_at` string: ISO timestamp when the outbound dial window closes. Null until the window opens.

## Changes

- **2026-11-03** `a6fb6a739212`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/cekura/apis/cekura-api/changes/test_framework/v2/runs/:id/get.md)

---

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