osmTalk Docs
Calls

Recordings & Storage

Stereo recordings, retention policy, and bring-your-own S3 / MinIO storage.

Every call can be automatically recorded in WAV format, with separate channels for the caller and the agent so reviewers can isolate one voice from the other.

Enable recording

Per-agent setting in Advanced → Recording → Enable Call Recording.

When on, every call from this agent produces:

  • recordingUrl — a single mixed mono WAV (caller and agent combined)
  • recordingMultiChannelUrl(optional) stereo WAV where left channel = caller, right channel = agent

Both are stored 7-day-presigned URLs that work in any browser or audio player.

Multi-channel (stereo) recording

Stereo recording is opt-in at the org level to keep storage costs predictable. Enable under Settings → Recording → Enable Multi-Channel Recording.

When on, every recorded call uploads a second .stereo.wav file alongside the mixed mono. Useful for:

  • Compliance review (verify exactly what the caller said vs the agent)
  • Training data export (one channel = ground-truth user audio)
  • Diarized transcript validation

Bring Your Own S3 storage

By default, recordings are stored in the osmTalk-hosted MinIO bucket. For compliance, data-residency, or regulatory reasons you can point every recording at your own S3-compatible bucket (AWS S3, Cloudflare R2, GCS via S3 interop, on-prem MinIO).

Configure under Settings → Storage — or via the API:

curl -X PUT https://api.osmtalk.com/api/settings/storage \
  -H "Authorization: Bearer $OSMTALK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "s3Endpoint": "https://s3.ap-south-1.amazonaws.com",
    "s3Region": "ap-south-1",
    "s3Bucket": "your-recordings-bucket",
    "s3AccessKey": "AKIA...",
    "s3SecretKey": "...",
    "s3PublicEndpoint": "https://recordings.yourcompany.com"
  }'
FieldDescription
s3EndpointS3-compatible API URL. Required to enable BYO storage.
s3RegionAWS region (ap-south-1, us-east-1, etc.)
s3BucketBucket name. Must already exist — osmTalk does not create user buckets.
s3AccessKey / s3SecretKeyCredentials with s3:PutObject + s3:GetObject on the bucket
s3PublicEndpoint(Optional) Public URL prefix used in presigned URLs — typically a CDN or proxy

Once set, every new recording goes to your bucket. Older recordings stay where they were uploaded.

Required bucket permissions

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": ["s3:PutObject", "s3:GetObject"],
    "Resource": "arn:aws:s3:::your-recordings-bucket/*"
  }]
}

Encryption

For server-side encryption with KMS, configure the bucket policy in your AWS console — osmTalk uses the bucket's default encryption settings.

Retention policy

Recordings beyond the retention window are deleted automatically by the data-retention job (runs daily).

SettingDefault
recordingRetentionDays (org-level)90

Tune via Settings → Storage → Retention Days, or:

curl -X PUT https://api.osmtalk.com/api/settings/storage \
  -H "Authorization: Bearer $OSMTALK_API_KEY" \
  -d '{ "recordingRetentionDays": 365 }'

Range: 1 – 3650 days.

Note: Retention only applies to recordings on the platform MinIO. If you've configured BYO S3, manage retention via your bucket's lifecycle rules.

Transcripts

Transcripts are persisted on the call record as a JSON array of { role, content, timestamp } turns — available even without recording enabled. View under Call Details or fetch via:

GET /api/calls/{callId}

The transcript field contains the full conversation. The transcript_object style with per-word timestamps is on the roadmap for Phase X.

Live transcript stream

During an active web call, the widget receives user-transcript and bot-transcript events on the osmTalk real-time data channel. Subscribe to them in your custom widget to render captions in real time.

For phone calls, transcripts are available post-call via the standard GET /api/calls/{callId} endpoint.