Recording
The environment's recording policy, and the stop switch
GET /v1/recording-policy flows:read
Responses
- 200
Status
Fields
-
dataRecordingPolicyStatus requiredFields
-
policyany required -
suspendedAtstring | null requiredWhen the workspace's stop switch was set; nothing records while it is on
-
suspendedBystring | null required
-
-
- 400
Invalid request
- 401
Missing or invalid API key
- 404
Not found
- 429
rate_limited, or another limit named byerror.code
Register the recording policy
PUT /v1/recording-policy flows:write
Like PUT /v1/queues: hcc.serve reports it on startup (mode: "report" only activates a version never seen before) and hcc.recording.deploy activates it from CI. A redeploy does not clear the workspace's stop switch.
Body
-
policyobject requiredFields
-
mode"record" | "off" required -
noticeobjectDefault
{}.Fields
-
textstringDefault
"This call may be recorded and transcribed.". -
voicestring -
languagestring
-
-
retentionobjectDefault
{}.Fields
-
audioDaysintegerDefault
90. 1 to 3650. -
transcriptDaysintegerDefault
365. 1 to 3650.
-
-
transcribefalse | objectDefault
false.Fields
object
-
languagestring -
redact"pci" | "ssn"[]
-
-
-
mode"report" | "deploy"Default
"report". -
alsoTestbooleanLive keys only: also register the same version in test Default
false.
Responses
- 200
The registered version
Fields
-
dataRecordingPolicy requiredWhat
defineRecordingPolicydeclares. Off unless one is deployed.Fields
-
versionstring required -
environment"live" | "test" required -
definitionobject required -
createdAtstring required -
activatedAtstring required -
lastSeenAtstring required
-
-
testobjectWith
alsoTest: the version registered in testFields
-
dataRecordingPolicy requiredWhat
defineRecordingPolicydeclares. Off unless one is deployed.
-
-
- 400
Invalid request
- 401
Missing or invalid API key
- 404
Not found
- 429
rate_limited, or another limit named byerror.code
Clear the workspace's stop switch
DELETE /v1/recording-policy/suspension recording:manage
The dashboard can only stop recording. Starting it again is this deliberate call, with a live key that has the recording:manage scope, which only an owner or admin can grant. Calls already in progress stay unrecorded; new calls follow the policy.
Responses
- 204
Cleared
- 400
Invalid request
- 401
Missing or invalid API key
- 404
Not found
- 429
rate_limited, or another limit named byerror.code
Pause a call's recording
POST /v1/calls/{id}/recording/pause calls:write
What is said while paused is not in the file. 409 when nothing is being recorded yet.
Path
idstring required
Responses
- 202
Applied
Fields
-
dataRecordingControlResult requiredFields
-
phasestring required
-
-
- 400
Invalid request
- 401
Missing or invalid API key
- 404
Not found
- 429
rate_limited, or another limit named byerror.code
Resume a call's recording
POST /v1/calls/{id}/recording/resume calls:write
Picks up after a pause. 409 when nothing is being recorded.
Path
idstring required
Responses
- 202
Applied
Fields
-
dataRecordingControlResult requiredFields
-
phasestring required
-
-
- 400
Invalid request
- 401
Missing or invalid API key
- 404
Not found
- 429
rate_limited, or another limit named byerror.code
A call's recordings
GET /v1/calls/{id}/recordings calls:read
Metadata only: start time, duration, channels, status and when it is deleted.
Path
idstring required
Responses
- 200
Recordings
Fields
-
dataRecording[] requiredFields
-
idstring required -
callIdstring required -
statusstring required -
sourcestring required -
channelsinteger | null requiredChannels in the file. Two channels do not promise one speaker per channel on calls with a rep.
-
durationSecondsinteger | null required -
startedAtstring | null required -
pausesobject[] required -
contentTypestring | null required -
bytesinteger | null required -
deleteAfterstring | null required -
deletedAtstring | null required -
createdAtstring required
-
-
- 400
Invalid request
- 401
Missing or invalid API key
- 404
Not found
- 429
rate_limited, or another limit named byerror.code
Delete a call's recordings
DELETE /v1/calls/{id}/recordings calls:write
Stops one being made, then removes the audio from storage and from the provider, and the transcripts' text. The rows stay, saying there was a recording and when it went. The audio's removal runs in the background.
Path
idstring required
Responses
- 202
Removal started
Fields
-
dataRecording[] requiredFields
-
idstring required -
callIdstring required -
statusstring required -
sourcestring required -
channelsinteger | null requiredChannels in the file. Two channels do not promise one speaker per channel on calls with a rep.
-
durationSecondsinteger | null required -
startedAtstring | null required -
pausesobject[] required -
contentTypestring | null required -
bytesinteger | null required -
deleteAfterstring | null required -
deletedAtstring | null required -
createdAtstring required
-
-
- 400
Invalid request
- 401
Missing or invalid API key
- 404
Not found
- 429
rate_limited, or another limit named byerror.code
A call's rep transcripts
GET /v1/calls/{id}/transcripts calls:read
Without their text. AI agent conversations come as conversation.transcript.ready.
Path
idstring required
Responses
- 200
Transcripts
Fields
-
dataCallTranscriptSummary[] requiredFields
-
idstring required -
callIdstring required -
recordingIdstring required -
status"pending" | "processing" | "ready" | "partial" | "failed" | "deleted" required -
failureReason"no_audio" | "provider_error" | "unsupported_audio" | "not_configured" | "billing" | "suspended" | null required -
repIdsstring[] required -
languagestring | null required -
speakerSeparation"channels" | "diarized" | "none" | null requiredchannels: speakers come from the file's channels, on a transcript that showed two separate voices.diarized: the provider estimated them, asunknownwith aspeakerTag.none: one voice, unlabeled. -
segmentCountinteger required -
deleteAfterstring | null required -
deletedAtstring | null required -
createdAtstring required
-
-
- 400
Invalid request
- 401
Missing or invalid API key
- 404
Not found
- 429
rate_limited, or another limit named byerror.code
One rep transcript, with its text
GET /v1/calls/{id}/transcripts/{transcriptId} calls:read
The transcriptId of call.transcript.ready, which carries no text itself.
Path
idstring requiredtranscriptIdstring required
Responses
- 200
Transcript
Fields
-
dataCallTranscript required
-
- 400
Invalid request
- 401
Missing or invalid API key
- 404
Not found
- 429
rate_limited, or another limit named byerror.code