Platform
Features
Solutions
Transcripts
Working with Structured Transcript Data
The transcripts endpoint exposes machine-generated verbatim records of participant sessions in a structured JSON format. Each transcript object contains:
Speaker turns — identifies participant vs system/moderator.
Timestamps — millisecond-level markers for start and end of each segment.
Text content — normalized speech-to-text output.
Developers can:
Fetch the full transcript for a given responseId.
Use query parameters (e.g. start, end) to limit results to a time window.
Combine with video or audio metadata for playback sync.
Paginate long transcripts efficiently.
This endpoint is designed for downstream automation — powering search, summarization, highlight extraction, or integration into custom analysis pipelines — without requiring raw media processing.
Transcripts are available within each TestSessionRecording, which can be queried for via a TestResultNode.
Fetch a specific response transcript
Here we'll start our query at the the userTestResult resolver and from there select the recordings we're interested in, along with their transcripts.
# Start by selected a specific response using its UUID query specificResult { userTestResult( resultUuid: "ut_response_9568e478-f8fe-450d-81e6-741a279c6b5b" ) { ...resultSelection } } # For the UserTestResult we need to fetch the appropriate recording... fragment resultSelection on UserTestResult { name responseUUID status recordings { download { ...recordingSelection } } participant { anonymousId email name } } # On the TestSessionRecording we are mostly interested in the # transcript but can also retrieve the video recording itself fragment recordingSelection on TestSessionRecording { transcription videoUrl filesize duration startTime failedStatus failedType mimeType missingDataWarning isAudio usertestName createdAt }
# Start by selected a specific response using its UUID query specificResult { userTestResult( resultUuid: "ut_response_9568e478-f8fe-450d-81e6-741a279c6b5b" ) { ...resultSelection } } # For the UserTestResult we need to fetch the appropriate recording... fragment resultSelection on UserTestResult { name responseUUID status recordings { download { ...recordingSelection } } participant { anonymousId email name } } # On the TestSessionRecording we are mostly interested in the # transcript but can also retrieve the video recording itself fragment recordingSelection on TestSessionRecording { transcription videoUrl filesize duration startTime failedStatus failedType mimeType missingDataWarning isAudio usertestName createdAt }
# Start by selected a specific response using its UUID query specificResult { userTestResult( resultUuid: "ut_response_9568e478-f8fe-450d-81e6-741a279c6b5b" ) { ...resultSelection } } # For the UserTestResult we need to fetch the appropriate recording... fragment resultSelection on UserTestResult { name responseUUID status recordings { download { ...recordingSelection } } participant { anonymousId email name } } # On the TestSessionRecording we are mostly interested in the # transcript but can also retrieve the video recording itself fragment recordingSelection on TestSessionRecording { transcription videoUrl filesize duration startTime failedStatus failedType mimeType missingDataWarning isAudio usertestName createdAt }
Fetch transcription for all responses to a specific test
Since we can fetch many responses for a single test, we're also able to fetch all transcripts at the same time.
(For info on pagination, see Pagination)
query listResults { userTest(uuid: "ut_645c4faa-5c2d-49b1-85fa-823ffbbbfa17") { id results(first: 4) { edges { node { ...resultSelection } } } } }
query listResults { userTest(uuid: "ut_645c4faa-5c2d-49b1-85fa-823ffbbbfa17") { id results(first: 4) { edges { node { ...resultSelection } } } } }
query listResults { userTest(uuid: "ut_645c4faa-5c2d-49b1-85fa-823ffbbbfa17") { id results(first: 4) { edges { node { ...resultSelection } } } } }
Transcript data example
The transcript is returned as a JSON sting which will require decoding in your script itself.
It includes the entire transcript and also breaks the transcript down into individual sentences and words with individual timestamps.
Here's an example transcript, trimmed for brevity:
{ "metadata": { "transaction_key": "deprecated", "created": "2025-09-10T10:38:08.750Z", "channels": 1, "models": ["1abfe86b-e047-4eed-858a-35e5625b41ee"], "request_id": "3df2e8a6-f1f2-4b19-82f9-4ba77a50311c", "model_info": { "1abfe86b-e047-4eed-858a-35e5625b41ee": { "arch": "nova-2", "name": "2-general-nova", "version": "2024-01-06.5664" } }, "duration": 32.693687, "sha256": "196cac70fff22e8587b0f8a3f6249eb77f8ef4b0d19211da287be0461c604a81" }, "results": { "channels": [ { "detected_language": "en", "alternatives": [ { "transcript": "Okay. This is a short transcript example. And if I wait a few seconds between sentences, it should break them out into different lines.", "paragraphs": { "transcript": "\\nSpeaker 0: Okay. This is a short transcript example. And if I wait a few seconds between sentences, it should break them out into different lines.", "paragraphs": [ { "end": 26.528687, "speaker": 0, "sentences": [ { "end": 9.5199995, "text": "Okay.", "start": 9.04 }, { "end": 13.46, "text": "This is a short transcript example.", "start": 9.5199995 }, { "end": 26.528687, "text": "And if I wait a few seconds between sentences, it should break them out into different lines.", "start": 16.055 } ], "start": 9.04, "num_words": 24 } ] }, "words": [ { "word": "okay", "start": 9.04, "speaker_confidence": 0.80801547, "confidence": 0.76546234, "speaker": 0, "end": 9.5199995, "punctuated_word": "Okay." }, { "word": "this", "start": 9.5199995, "speaker_confidence": 0.80801547, "confidence": 0.999283, "speaker": 0, "end": 9.76, "punctuated_word": "This" } ], "confidence": 0.99968684 } ], "language_confidence": 0.9562097 } ], "utterances": [ { "transcript": "Okay. This is a short transcript example.", "id": "1c11be29-5d2c-4591-ad4d-7716a7326a06", "start": 9.04, "confidence": 0.93274677, "speaker": 0, "end": 13.46, "words": [ { "word": "okay", "start": 9.04, "speaker_confidence": 0.80801547, "confidence": 0.76546234, "speaker": 0, "end": 9.5199995, "punctuated_word": "Okay." }, { "word": "this", "start": 9.5199995, "speaker_confidence": 0.80801547, "confidence": 0.999283, "speaker": 0, "end": 9.76, "punctuated_word": "This" }, { "word": "is", "start": 9.76, "speaker_confidence": 0.80801547, "confidence": 0.99983037, "speaker": 0, "end": 10.24, "punctuated_word": "is" }, { "word": "a", "start": 10.24, "speaker_confidence": 0.80801547, "confidence": 0.99959403, "speaker": 0, "end": 10.74, "punctuated_word": "a" }, { "word": "short", "start": 11.12, "speaker_confidence": 0.80801547, "confidence": 0.99972695, "speaker": 0, "end": 11.62, "punctuated_word": "short" }, { "word": "transcript", "start": 12, "speaker_confidence": 0.80801547, "confidence": 0.88348657, "speaker": 0, "end": 12.5, "punctuated_word": "transcript" }, { "word": "example", "start": 12.96, "speaker_confidence": 0.80801547, "confidence": 0.88184386, "speaker": 0, "end": 13.46, "punctuated_word": "example." } ], "channel": 0 } ] } }
{ "metadata": { "transaction_key": "deprecated", "created": "2025-09-10T10:38:08.750Z", "channels": 1, "models": ["1abfe86b-e047-4eed-858a-35e5625b41ee"], "request_id": "3df2e8a6-f1f2-4b19-82f9-4ba77a50311c", "model_info": { "1abfe86b-e047-4eed-858a-35e5625b41ee": { "arch": "nova-2", "name": "2-general-nova", "version": "2024-01-06.5664" } }, "duration": 32.693687, "sha256": "196cac70fff22e8587b0f8a3f6249eb77f8ef4b0d19211da287be0461c604a81" }, "results": { "channels": [ { "detected_language": "en", "alternatives": [ { "transcript": "Okay. This is a short transcript example. And if I wait a few seconds between sentences, it should break them out into different lines.", "paragraphs": { "transcript": "\\nSpeaker 0: Okay. This is a short transcript example. And if I wait a few seconds between sentences, it should break them out into different lines.", "paragraphs": [ { "end": 26.528687, "speaker": 0, "sentences": [ { "end": 9.5199995, "text": "Okay.", "start": 9.04 }, { "end": 13.46, "text": "This is a short transcript example.", "start": 9.5199995 }, { "end": 26.528687, "text": "And if I wait a few seconds between sentences, it should break them out into different lines.", "start": 16.055 } ], "start": 9.04, "num_words": 24 } ] }, "words": [ { "word": "okay", "start": 9.04, "speaker_confidence": 0.80801547, "confidence": 0.76546234, "speaker": 0, "end": 9.5199995, "punctuated_word": "Okay." }, { "word": "this", "start": 9.5199995, "speaker_confidence": 0.80801547, "confidence": 0.999283, "speaker": 0, "end": 9.76, "punctuated_word": "This" } ], "confidence": 0.99968684 } ], "language_confidence": 0.9562097 } ], "utterances": [ { "transcript": "Okay. This is a short transcript example.", "id": "1c11be29-5d2c-4591-ad4d-7716a7326a06", "start": 9.04, "confidence": 0.93274677, "speaker": 0, "end": 13.46, "words": [ { "word": "okay", "start": 9.04, "speaker_confidence": 0.80801547, "confidence": 0.76546234, "speaker": 0, "end": 9.5199995, "punctuated_word": "Okay." }, { "word": "this", "start": 9.5199995, "speaker_confidence": 0.80801547, "confidence": 0.999283, "speaker": 0, "end": 9.76, "punctuated_word": "This" }, { "word": "is", "start": 9.76, "speaker_confidence": 0.80801547, "confidence": 0.99983037, "speaker": 0, "end": 10.24, "punctuated_word": "is" }, { "word": "a", "start": 10.24, "speaker_confidence": 0.80801547, "confidence": 0.99959403, "speaker": 0, "end": 10.74, "punctuated_word": "a" }, { "word": "short", "start": 11.12, "speaker_confidence": 0.80801547, "confidence": 0.99972695, "speaker": 0, "end": 11.62, "punctuated_word": "short" }, { "word": "transcript", "start": 12, "speaker_confidence": 0.80801547, "confidence": 0.88348657, "speaker": 0, "end": 12.5, "punctuated_word": "transcript" }, { "word": "example", "start": 12.96, "speaker_confidence": 0.80801547, "confidence": 0.88184386, "speaker": 0, "end": 13.46, "punctuated_word": "example." } ], "channel": 0 } ] } }
{ "metadata": { "transaction_key": "deprecated", "created": "2025-09-10T10:38:08.750Z", "channels": 1, "models": ["1abfe86b-e047-4eed-858a-35e5625b41ee"], "request_id": "3df2e8a6-f1f2-4b19-82f9-4ba77a50311c", "model_info": { "1abfe86b-e047-4eed-858a-35e5625b41ee": { "arch": "nova-2", "name": "2-general-nova", "version": "2024-01-06.5664" } }, "duration": 32.693687, "sha256": "196cac70fff22e8587b0f8a3f6249eb77f8ef4b0d19211da287be0461c604a81" }, "results": { "channels": [ { "detected_language": "en", "alternatives": [ { "transcript": "Okay. This is a short transcript example. And if I wait a few seconds between sentences, it should break them out into different lines.", "paragraphs": { "transcript": "\\nSpeaker 0: Okay. This is a short transcript example. And if I wait a few seconds between sentences, it should break them out into different lines.", "paragraphs": [ { "end": 26.528687, "speaker": 0, "sentences": [ { "end": 9.5199995, "text": "Okay.", "start": 9.04 }, { "end": 13.46, "text": "This is a short transcript example.", "start": 9.5199995 }, { "end": 26.528687, "text": "And if I wait a few seconds between sentences, it should break them out into different lines.", "start": 16.055 } ], "start": 9.04, "num_words": 24 } ] }, "words": [ { "word": "okay", "start": 9.04, "speaker_confidence": 0.80801547, "confidence": 0.76546234, "speaker": 0, "end": 9.5199995, "punctuated_word": "Okay." }, { "word": "this", "start": 9.5199995, "speaker_confidence": 0.80801547, "confidence": 0.999283, "speaker": 0, "end": 9.76, "punctuated_word": "This" } ], "confidence": 0.99968684 } ], "language_confidence": 0.9562097 } ], "utterances": [ { "transcript": "Okay. This is a short transcript example.", "id": "1c11be29-5d2c-4591-ad4d-7716a7326a06", "start": 9.04, "confidence": 0.93274677, "speaker": 0, "end": 13.46, "words": [ { "word": "okay", "start": 9.04, "speaker_confidence": 0.80801547, "confidence": 0.76546234, "speaker": 0, "end": 9.5199995, "punctuated_word": "Okay." }, { "word": "this", "start": 9.5199995, "speaker_confidence": 0.80801547, "confidence": 0.999283, "speaker": 0, "end": 9.76, "punctuated_word": "This" }, { "word": "is", "start": 9.76, "speaker_confidence": 0.80801547, "confidence": 0.99983037, "speaker": 0, "end": 10.24, "punctuated_word": "is" }, { "word": "a", "start": 10.24, "speaker_confidence": 0.80801547, "confidence": 0.99959403, "speaker": 0, "end": 10.74, "punctuated_word": "a" }, { "word": "short", "start": 11.12, "speaker_confidence": 0.80801547, "confidence": 0.99972695, "speaker": 0, "end": 11.62, "punctuated_word": "short" }, { "word": "transcript", "start": 12, "speaker_confidence": 0.80801547, "confidence": 0.88348657, "speaker": 0, "end": 12.5, "punctuated_word": "transcript" }, { "word": "example", "start": 12.96, "speaker_confidence": 0.80801547, "confidence": 0.88184386, "speaker": 0, "end": 13.46, "punctuated_word": "example." } ], "channel": 0 } ] } }