Voice call recording lifecycle
A voice call recording moves through several stages from the moment the call starts until it is deleted. This walkthrough covers the full operator lifecycle: arming a recording on a call, storing the audio in your own cloud bucket (BYO), setting retention windows that delete recordings automatically after a set period, placing a legal hold to preserve specific recordings past the retention window, replaying and exporting the recording, purging recordings on a customer’s request, and proving that purging in the audit log. Each section below is a self-contained operation — you can jump straight to the one you need. The sections build on each other, but they do not require you to have completed the earlier ones.1. Lifecycle primitives
Before walking the individual operations, here are the four primitives that govern a voice recording’s lifetime:
The consent primitive gates whether a recording is captured at all. Retention, egress, and legal hold govern what happens to it afterwards. Every change to any of these is written to the audit log.
2. Start a call recording
The first step is arming a recording to be captured when a call starts.Consent posture
Your organization’s recording consent is a two-axis policy configured in Voice → Calls → Recording settings — it is a tenant-owned control, and changing it is audit-logged. The two axes are:
See Call Recording Consent for the full per-jurisdiction guidance and the rules each mode pair enforces.
Channel announcement
When the consent policy calls for an announcement (anything other thannone), Orbit plays the announcement to the participant(s) before the call connects and before recording starts. If the caller hangs up during the announcement, no recording is captured and no per-minute recording cost is billed.
The announcement can be a TTS string (read out by your organization’s default voice engine) or a URL to a .wav or .mp3 file in GCS or any reachable HTTPS endpoint. Configure it in the same Recording settings page under the Announcement section.
Arming a recording on a call
With auto-record eligibility (inbound_only, outbound_only, all_calls): every qualifying call is recorded automatically. You do not call a recording endpoint — Orbit’s media-egress pipeline starts capturing on call answer and finalizes the recording when the call ends.
With manual eligibility: your operator must arm the recording on a live call through the dashboard (click Start recording on the active call detail) or the API:
not-recording to recording. A mid-call disclosure plays to every remaining participant when you start recording on a live call, regardless of the pre-connect announcement mode.
Recording lifecycle webhooks
Three webhooks fire during a recording’s lifetime:
Subscribe to these under Developers → Webhooks to drive your downstream pipeline. See the webhook consumer guide for signature verification and retry handling.
3. Set retention windows
Retention deletes recordings — audio and metadata — automatically after a set number of days. It is disabled by default; recordings persist indefinitely until you enable it.Configure in the dashboard
Open Settings → Retention. The page lists independent windows for each data domain:
Each domain has its own window in days. Enable the Recordings domain, set the number of days, and save. The retention sweep runs periodically and deletes recordings that have aged past the window.
The window counts from the recording’s
finalized_at timestamp — the moment the egress pipeline finished writing the audio file. A recording that finalized 90 days ago is eligible for deletion under a 90-day window.Configure through the API
Retention sweep and legal hold interaction
A recording under a legal hold is skipped by the sweep. When the hold is released, the recording becomes eligible for sweep on the next run — the sweep re-checks every recording on each pass, so a just-released recording is swept immediately if it has aged past the window. See Legal Hold below.4. Egress to your cloud storage (BYO)
By default, call recordings land on Orbit-managed object storage. If you need the audio in your own cloud account — for your own knowledge-ingest pipeline, eDiscovery warehouse, or quality tooling — configure BYO storage.Configure the destination
The BYO destination is a Google Cloud Storage bucket you own. Orbit’s recording service authenticates to your bucket with workload identity — there is no service-account key to register. Set it in Settings → Voice → Recording storage or through the API:byo mode, every call recording that finalizes is copied to gs://<bucket>/<prefix>/<tenantId>/<callId>.mp3. The recording metadata (duration, transcript, QC report) remains in your workspace — only the audio file is egressed.
For the full bucket and IAM setup walkthrough, see Voice call recordings to your own bucket.
Validate the egress stamp
Each egressed recording carries an egress stamp — a signed provenance record that proves the file was delivered by Orbit’s egress pipeline and has not been altered in transit. The stamp is recorded on the recording row and returned by the recordings API.content_sha256 is the SHA-256 of the audio file Orbit delivered. Compute the hash of the file in your bucket and compare it to the stamp — a match confirms the file arrived intact. The recordings API also exposes an integrity seal endpoint (POST /recordings/:id/integrity/seal) that anchors the content into a tamper-evident hash chain; see Integrity seals.
Pinning a data-residency region
For tenants subject to data-residency obligations, pass aregion in the BYO configuration. The recording is stored in the specified GCS region, and the metadata in your workspace is locked to a matching data-residency plane. Once set, the region binding is permanent — changing it for existing recordings is refused. For the full residency model, see Voice data residency.
5. Replay the recording
A finalized recording is playable from the dashboard and the recordings API. The recording library is the main surface for replay.In the dashboard
Open Voice → Recordings (or the quick-link from the call detail). Click a recording row to open the player. The player shows the waveform, the transcript side-by-side, and speaker labels. It is the same player used for agent QA and supervisor review.Through the API
The recordings API returns a signed, time-limited playback URL. The URL is valid for the duration specified (clamped to a maximum of 24 hours):playback_url in a browser or embed it in your own review tool. The URL is public — anyone with the link can play the recording — so treat it as a bearer credential and set a short TTL.
For video room recordings, the share-link surface under POST /recordings/:id/share adds an expiry-gated public page with a branded player instead. See Share tokens for external auditors.
6. Replay and legal hold
A legal hold exempts a specific voice recording — or every recording on a conversation — from the retention sweep. Use it when counsel or a regulator asks you to preserve a call.Place a hold on a single recording
Place a hold on every recording in a conversation
When a dispute covers an entire call, hold all linked recordings — every call leg and every conference bridge — in one write:voice:write scope. Every place, release, and read is recorded in the audit log. For the full legal hold model, see Legal Holds on Messaging Conversations; the recording hold documented here is the voice-facing twin of that surface.
Legal hold and HIPAA mode
When your organization operates under HIPAA, the legal hold reason field must not carry PHI — the reason is stored in the recording row and appears in audit log exports. Describe the matter in generic terms (e.g., “Subpoena — litigation hold — Q4 2026”) rather than naming individuals or discussing clinical context. See HIPAA posture guide.7. Purge a recording
A purge deletes a recording — the audio file, the transcript, and all derived artifacts (clips, highlights, QC report, integrity seal) — immediately and irreversibly. Use it for a customer deletion request, a DSAR right-to-erasure, or a policy-mandated removal.Single recording purge
Bulk purge by conversation
voice:write. Every recording in the conversation is purged — voice call legs, conference bridges, and any linked recordings.
Purge and BYO storage copies
When you purge a recording, Orbit deletes the audio file from its own managed storage. If the recording was egressed to your BYO bucket, the copy in your bucket is not deleted by the purge — Orbit cannot reach into your bucket after the egress handoff. To fully comply with a deletion request, you must also remove the file from your BYO bucket. Use the egress stamp’sdestination path to locate the object:
Rejections during purge
A recording that is currently finalizing (status
processing) also accepts a purge — the finalize step is cancelled, and any partially written audio is discarded.
8. Audit the lifecycle end to end
Every lifecycle transition is recorded in the audit log. To prove that a recording was handled correctly — from capture through retention or purge — export the audit log and trace the recording’s timeline.Export the audit log
In the dashboard, open Settings → Audit log and click Export. Choose CSV or JSON, pick a date range, and download. Through the API:Trace a recording’s lifecycle
Filter the export for the recording’s ID (rec_01J8ZC3NPA in the examples below). The audit log entries for a full lifecycle look like this:
audit.entry event fires on every audit write, and the payload carries the same fields as the export. See Webhook event catalog.
9. Common pitfalls
Recording stays in an active or processing state forever
A stuck recording usually means the call never ended cleanly or the egress pipeline encountered a transient error. Check the recording’s status in the recording library. If the row showsprocessing and the call has been over for more than a few minutes, the finalize step may have failed silently — contact support with the recording ID and the call ID.
Egress signature mismatch
When your BYO bucket’s copy does not match the egress stamp’scontent_sha256, the file may have been modified after delivery, or a partial write occurred. Download the recording through the recordings API (playback-url) and compare — the API-hosted copy is the authoritative one. If your BYO copy differs but the API copy is intact, delete the BYO object and re-finalize through the recordings API (if supported for your recording) or contact support.
Retention window shorter than legal hold window creates a floor
Setting a retention window of 30 days while recordings under legal hold must be kept for 7 years is fine — legal hold exempts recordings from the sweep regardless of the window. But if you release every hold at year 7 and the window is 30 days, the sweep deletes the recordings on the next pass — they are now 7 years past theirfinalized_at and 7,300 days over the 30-day window. Plan your hold release: either keep the hold until audit trail closure, or widen the retention window before releasing the hold so the recordings survive long enough for a final export.