Recordings API
These endpoints govern the compliance and sharing lifecycle of a finalized recording — separate from the post-finalize quality-control surface. They cover three concerns:- Legal hold — exempt a recording from the age-based retention sweeps while litigation or an eDiscovery obligation is open.
- Cryptographic integrity — seal a recording into a tamper-evident, per-tenant hash chain, verify it later, and export a portable signed provenance digest an auditor can check offline.
- Share links — mint a time-limited, signed public link so a guest with no Orbit account can watch a completed video-room recording, and revoke every outstanding link at once.
/api/v1/recordings
Authentication: API key (X-API-Key) or session JWT.
Scopes & roles:
- Legal-hold and integrity reads (
GET) require thevoice:readscope. - Placing/releasing a legal hold (
PUT) and sealing integrity (POST .../integrity/seal) are compliance-governance actions: they require thevoice:writescope and anowneroradminrole, and are audit-logged. - Share endpoints operate on video-room artefacts:
POST .../shareandDELETE .../sharerequire thevideo:writescope.
All endpoints are tenant-scoped: you only ever address recordings in your own account.
{id} is the recording id (1–128 characters). An unknown id returns 404 NOT_FOUND; a malformed id or body returns 400 VALIDATION_ERROR.
Get legal-hold state
Returns the current eDiscovery legal-hold state for one recording — thelegal_hold flag, the operator-supplied reason, and who/when it last changed. While a recording is held it is exempt from the age-based retention sweeps (both the storage object and the database row), so it survives litigation-preservation obligations.
Place or release a legal hold
Sets the hold on or off. While held, the recording and its linked video-room session artefacts are exempt from the retention sweeps. This is a compliance-governance action — it requires anowner or admin role and is recorded in the audit log.
The response echoes the resulting state, identical in shape to the
GET above.
Get the integrity seal
Returns the recording’s cryptographic-integrity seal — the content hash, its link in the tenant’s recording-integrity hash chain, and the KMS/BYOK key metadata. A raw key reference is never echoed; only the provider and a key fingerprint travel.sealed is false (and seal is null) when the recording has not been sealed yet.
Verify the integrity seal
Re-hashes the stored seal and reports whether the recording’s bytes and key metadata are intact.valid is the verdict; reason explains a failure; current_hash and expected_hash let an integrator compare the stored versus recomputed chain link.
Export a signed provenance digest
Returns a portable, HMAC-signed digest a customer ships alongside an exported recording so an auditor can verify provenance offline. The recording must already be sealed — calling this on an unsealed recording returns400 (RECORDING_INTEGRITY_NOT_SEALED).
data is a self-contained digest object: the recording id, the sealed chain hashes and key metadata, the issuing jurisdiction and timestamp, and an HMAC signature an auditor recomputes to confirm the digest was issued by your tenant and has not been altered.
Seal a recording
Computes and persists the tamper-evident seal, chaining it into the tenant’s recording-integrity hash chain and stamping the tenant’s BYOK/KMS posture. This is a compliance-governance action — it requires anowner or admin role and is written into the public audit-log hash chain.
If no content hash is supplied and the egress pipeline has not stamped one yet, the call returns
400 (RECORDING_INTEGRITY_MISSING_CONTENT_HASH). On success the response carries sealed: true and the resulting seal, in the same shape as the GET .../integrity response.
Mint a share link
Mints a time-limited, signed public link for a completed video-room recording so a guest with no Orbit account can watch it. The requested lifetime is clamped server-side to between 5 minutes and 30 days; omitexpires_in_seconds for the 7-day default. Only completed video-room recordings are shareable — anything else returns 400 (RECORDING_SHARE_NOT_SHAREABLE).
token — the only persisted state is a per-recording revocation nonce. A guest opens share_url to stream the recording without authenticating.
Revoke share links
Revokes every outstanding link for the recording by rotating its share nonce. Previously-shared URLs stop resolving immediately; you can mint fresh links afterwards. The call is audit-logged.See also
- Voice API — calls that produce recordings
- Video API — video-room sessions whose recordings are shareable
- Error codes