Skip to main content
Some customers’ rules say call audio must stay in their country - or simply never sit on someone else’s platform. This guide connects your own bucket to Nixflex, makes a real call, and shows the recording landing in your storage, with Nixflex keeping no copy. We use Cloudflare R2 here because it has a free tier and takes minutes to set up. Any S3-compatible provider works the same way - see the full provider list.

What you need

  • A Nixflex agent with a phone number attached (Quickstart if you don’t have one)
  • A free Cloudflare account

Step 1 - Create the bucket

1

Open R2

In the Cloudflare dashboard, go to R2 Object Storage and click Create bucket.
2

Name it

Any name works - for this guide, my-recordings. Location Automatic is fine; pick a jurisdiction (EU) if your rules require one.

Step 2 - Create the access keys

1

Manage API tokens

On the R2 overview page, open Manage API Tokens and click Create API Token.
2

Scope it

Permission: Object Read & Write. Scope it to just your new bucket.
3

Copy three things

The success screen shows your Access Key ID, Secret Access Key, and the S3 endpoint - https://<account_id>.r2.cloudflarestorage.com. They are shown once, so copy all three now.

Step 3 - Connect it to Nixflex

In the dashboard, open Settings → Recording storage, expand it, and fill in: Click Test & save. Nixflex writes and deletes a tiny probe object in your bucket before saving - if the button comes back Connected, your configuration is proven working, not just stored. Prefer the API? The same thing in one call:

Step 4 - Make a call and watch it land

Call your agent’s number, talk for a few seconds, and hang up. Within a minute:
  • Your bucket gains recordings/<call_id>.mp3 - open the R2 bucket’s Objects tab and it is there, downloadable, playable.
  • The call record carries recording_url: "byo:my-recordings/recordings/<call_id>.mp3" - a pointer to your bucket, because Nixflex holds no copy.
  • The dashboard shows “Stored in your bucket” with that path instead of an audio player.
Every upload is verified: Nixflex reads the object back and checks its size before treating the recording as stored.

Step 5 - Prove the safety net (optional but worth it)

What if your bucket breaks later - rotated keys, deleted bucket? A recording is never lost:
1

Break it on purpose

In your provider’s console, revoke the API token you created.
2

Make another call

Call the agent again and hang up.
3

See the fallback

The recording lands in Nixflex EU storage instead, and the call’s Events tab shows a STORAGE_FAILED note with the reason - so you know exactly which calls were affected while your bucket was down.
4

Fix it

Create a fresh token and update the credentials in Settings → Recording storage. The next call goes back to your bucket.

Where this leaves your data

  • Recordings live in your bucket, your region, your custody - Nixflex’s retention and deletion never touch them.
  • Deleting calls in Nixflex removes the call records; the audio files in your bucket follow your retention rules.
  • The transcript and analysis still live in Nixflex for now - keeping those in your infrastructure as well is on the roadmap.