Load-test export files
Export every call and step of a finished load-test run from its report page (Export data) or the API. You get a zip with calls.csv, steps.csv, calls.jsonl (the complete record), run.json and a README.md. The README inside each export is the authoritative description of that file.
Reading the files
- Join
steps.csvtocalls.csvoncall_id. - An empty cell means "not measured", never zero.
- Times are ISO 8601 in UTC.
- Recordings are not in the zip: download one by
recording_idwithGET /audio/download-url?audioId=. Recordings older than 30 days are archived and may not download. - Runs transcribed through Telnyx have no per-word confidence or response latency.
- Exports are kept for 30 days. You can export a run again at any time.
Export with the API
Endpoint: /testing/load-tests/{id}/exports. Needs the testing:read scope.
bash
# 1. Start an export of a finished run
curl -X POST -H "x-api-key: YOUR_API_KEY" \
https://api.nopaque.co.uk/testing/load-tests/RUN_ID/exports
# -> 202 {"export": {"exportId": "EXPORT_ID", "status": "pending", ...}}
# 2. Poll until status is "ready" (usually under a minute)
curl -H "x-api-key: YOUR_API_KEY" \
https://api.nopaque.co.uk/testing/load-tests/RUN_ID/exports/EXPORT_ID
# -> 200 {"export": {"status": "ready", "downloadUrl": "https://...", ...}}
# 3. Download the zip (the link is valid for 1 hour; poll again for a fresh one)
curl -L -o export.zip "DOWNLOAD_URL"calls.csv
| Column | Unit | Meaning | Empty means |
|---|---|---|---|
call_id | Unique id of this call. Joins to steps.csv `call_id` and to `id` in calls.jsonl. | Never empty. | |
load_test_run_id | The load-test run this call belongs to (the same for every row). | Not reported for this call (for example, the call was never answered or the field predates this data). | |
test_config_id | The test configuration the call executed. | Not reported for this call (for example, the call was never answered or the field predates this data). | |
status | Call record status: completed, failed, cancelled, running, or pending (created but never dialled). | Never empty. | |
outcome | Test verdict for the call: PASS, FAIL, ERROR or INCONCLUSIVE. | The call did not finish. | |
error_message | Why the call failed or errored, when known. | No error was recorded. | |
passed_steps | Number of steps that passed. | The call did not report step results. | |
failed_steps | Number of steps that failed or timed out. | The call did not report step results. | |
dialed_at | ISO 8601 UTC | When we dialled. | Not reported for this call (for example, the call was never answered or the field predates this data). |
answered_at | ISO 8601 UTC | When the far end answered. | Not answered, or not reported. |
ended_at | ISO 8601 UTC | When the call ended. | Not reported for this call (for example, the call was never answered or the field predates this data). |
dial_to_answer_ms | ms | Time from dialling to answer. | Not answered, or not reported. |
answer_to_first_utterance_ms | ms | Time from answer until the system under test first spoke. | Not reported for this call (for example, the call was never answered or the field predates this data). |
call_duration_s | s | Length of the call. | Not reported for this call (for example, the call was never answered or the field predates this data). |
to_number | E.164 | The number dialled. | Not reported for this call (for example, the call was never answered or the field predates this data). |
caller_id | E.164 | The caller ID presented on this call. | Not reported (the platform default number was presented). |
caller_id_from_pool | true when the caller ID was leased from the workspace's number pool for this call. The run-level split by source is in run.json stats. | Never empty. | |
terminal_status | How the call ended, from the tester: completed, failed, no_answer, aborted_by_duration, aborted_by_inactivity, and so on. | Not reported for this call (for example, the call was never answered or the field predates this data). | |
hangup_cause | Carrier hang-up cause (e.g. normal_clearing). | Not reported for this call (for example, the call was never answered or the field predates this data). | |
hangup_source | Who hung up: caller (us) or callee. | Not reported for this call (for example, the call was never answered or the field predates this data). | |
sip_hangup_cause | SIP response code behind the hang-up, when the carrier gave one. | Not reported for this call (for example, the call was never answered or the field predates this data). | |
estimated_mos | 1 to 4.5 | Estimated call quality (MOS) from the platform's own model (ITU-T G.107), using jitter and packet loss. This is the figure the run report uses. | Not enough audio statistics to estimate. |
telnyx_mos_inbound | 1 to 4.5 | MOS as reported by the carrier (Telnyx) for audio we received. Close to 4.5 on nearly every call, so prefer estimated_mos. | Not reported for this call (for example, the call was never answered or the field predates this data). |
telnyx_mos_outbound | 1 to 4.5 | MOS as reported by the carrier for audio we sent. | Not reported for this call (for example, the call was never answered or the field predates this data). |
inbound_jitter_max_variance_ms | Maximum jitter variance on received audio, exactly as reported by the carrier. The unit is the carrier's; treat it as relative between calls. | Not reported for this call (for example, the call was never answered or the field predates this data). | |
inbound_packets | RTP packets received. | Not reported for this call (for example, the call was never answered or the field predates this data). | |
inbound_packets_lost | RTP packets lost on the way to us. | Not reported for this call (for example, the call was never answered or the field predates this data). | |
outbound_packets | RTP packets sent. | Not reported for this call (for example, the call was never answered or the field predates this data). | |
outbound_packets_lost | RTP packets we sent that were lost. | Not reported for this call (for example, the call was never answered or the field predates this data). | |
codec | Audio codec negotiated on the call (e.g. PCMA). | Not reported for this call (for example, the call was never answered or the field predates this data). | |
audio_coverage | 0 to 1 | Share of the call during which we received audio frames. | Not reported for this call (for example, the call was never answered or the field predates this data). |
recording_id | Id of the call recording. Download it with GET /audio/download-url?audioId=<recording_id>. Recordings older than 30 days are archived and may not download. | No recording was saved. | |
recording_duration_s | s | Length of the recording. | No recording was saved. |
stt_provider | Speech-to-text path used for this run: deepgram (Deepgram direct) or telnyx (Telnyx, Deepgram engine). Telnyx returns no per-word data, so steps.csv word confidence and response latency are empty for telnyx runs. | Not recorded: the run was started before the platform recorded the provider (Deepgram unless an operator had chosen Telnyx). |
steps.csv
| Column | Unit | Meaning | Empty means |
|---|---|---|---|
call_id | The call this step belongs to. Joins to calls.csv `call_id`. | Never empty. | |
step_index | Position of the step in the test, from 0. | Never empty. | |
step_id | Id of the step in the test configuration. | Not reported for this call (for example, the call was never answered or the field predates this data). | |
step_name | Name of the step in the test configuration. | Not reported for this call (for example, the call was never answered or the field predates this data). | |
step_type | What the step did: listen, audio (play a clip), dtmf, hold or wait. | Not reported for this call (for example, the call was never answered or the field predates this data). | |
outcome | PASS, FAIL, TIMEOUT (nothing matched before the listen window closed) or ERROR. | Never empty. | |
error_message | Why the step failed, when known. | No error was recorded. | |
expected_transcript | What the step expected to hear. | The step does not listen. | |
actual_transcript | What was transcribed. | Nothing was transcribed for this step. | |
similarity | 0 to 100 | How closely actual matched expected. Can come from an early partial match (the step passes as soon as enough of the prompt is heard), so a correct prompt can score below 100. | The step does not listen. |
threshold | 0 to 100 | Similarity needed to pass. | The step does not listen. |
started_at | ISO 8601 UTC | When the step started. | Not reported for this call (for example, the call was never answered or the field predates this data). |
ended_at | ISO 8601 UTC | When the step ended. | Not reported for this call (for example, the call was never answered or the field predates this data). |
duration_ms | ms | How long the step took. | Not reported for this call (for example, the call was never answered or the field predates this data). |
response_latency_ms | ms | For an audio step: time from the end of the system's last word to our reply starting. | Not an audio reply, or the run used the telnyx speech-to-text path (no word timings). |
avg_word_confidence | 0 to 1 | Speech-to-text engine's average confidence over the words in this step. | No words were transcribed, or the run used the telnyx speech-to-text path. |
min_word_confidence | 0 to 1 | Lowest single-word confidence in this step. | No words were transcribed, or the run used the telnyx speech-to-text path. |
word_count | Number of words transcribed in this step. | No words were transcribed, or the run used the telnyx speech-to-text path. | |
digits_sent | DTMF digits we sent. | Not a DTMF step. | |
hold_secs | s | How long a hold step actually stayed on the line. | Not a hold step. |