The connection is tested before it is saved: Nixflex writes and deletes a tiny probe object in your bucket when you save the settings, so a saved configuration is a working configuration. Every recording upload is then verified - Nixflex reads the object back and checks its size before treating the recording as stored.
How it works
1
You connect a bucket
In Settings → Recording storage, or via the API below. You provide the bucket name, an endpoint URL, and credentials that allow writing objects.
2
Recordings go to your bucket
After each call, the audio is uploaded to
recordings/<call_id> in your bucket - .mp3 for a carrier recording, .wav when Nixflex or a web call recorded it (see Call recording). Nixflex stores only the object path, never the audio.3
The call record points at your bucket
recording_url becomes a path like byo:your-bucket/recordings/<call_id>.mp3. The dashboard shows where the file lives instead of a player - the audio is in your custody, so Nixflex has nothing to stream. Read the extension from recording_url rather than assuming one.If your bucket rejects an upload
A recording is never lost to a storage problem. If your bucket cannot take the file - deleted bucket, rotated credentials, an outage - the recording falls back to Nixflex’s standard EU storage for that call, and the call’s Events tab records aSTORAGE_FAILED event with the reason, so you can fix the bucket and know exactly which calls were affected.
Supported providers
Any storage that speaks the S3 API works. That includes:Amazon S3
Leave the endpoint empty and set your bucket’s region (for example
eu-west-2 or me-south-1). Create an IAM user with PutObject on the bucket and use its access key pair.Cloudflare R2
Endpoint:
https://<account_id>.r2.cloudflarestorage.com, region auto. In the R2 dashboard, create an API token with Object Read & Write scoped to your bucket - it gives you the access key pair and shows your endpoint.Google Cloud Storage
Endpoint:
https://storage.googleapis.com, region e.g. europe-west2. In Settings > Interoperability, create an HMAC key for a service account with write access - the HMAC key ID and secret are your key pair.Backblaze B2
Endpoint:
https://s3.<region>.backblazeb2.com (shown on your bucket page, e.g. s3.eu-central-003.backblazeb2.com). Create an application key scoped to the bucket - the keyID and applicationKey are your pair.Wasabi
Endpoint:
https://s3.<region>.wasabisys.com with the matching region (e.g. eu-west-1). Create an access key pair in the Wasabi console.MinIO / self-hosted
Your own
https:// endpoint. Any S3-compatible self-hosted store works the same way - useful for fully on-premise or air-gapped requirements.Azure Blob Storage does not speak the S3 API natively - put an S3-compatible gateway (such as MinIO Gateway) in front of it, then connect the gateway here.
Setting it up via the API
Storage is configured per API key - every call under the key uses it, across all your numbers and carriers.
The request returns
verified: true only after the probe write succeeds. Broken credentials are rejected, never saved.
Read the current configuration (the secret is never included):
What changes for you
recording_urlon the call record and in thecall.completedwebhook carries thebyo:path instead of a playable URL. If your code downloads recordings from that field, read the file from your own bucket instead.- The dashboard shows “Stored in your bucket” with the object path in place of the audio player.
- Deleting calls (GDPR deletion) removes the call record from Nixflex. Files in your bucket are in your custody - Nixflex never deletes from your storage, so apply your own retention rules there.
- Retention limits do not apply to your bucket. Nixflex’s 90-day cleanup covers Nixflex storage; your files are yours for as long as you keep them.
Consent and compliance
Where the file lives does not change the recording rules - announcement and consent requirements still apply. See Call recording.Related
- Call recording - switching recording on and off
- Webhooks -
recording_urlincall.completed - Data retention - what Nixflex keeps and for how long