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.
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.
Related
- Your own storage - full reference, all providers, API details
- Call recording - switching recording on and off
- Webhooks - reading
recording_urlincall.completed