Recording
Record a channel to an S3-compatible bucket that belongs to you. We start the recording, compose it, and write it to your storage — and keep no copy, because there is nowhere on AppLooma for one to go.
Note
Point a project at your bucket#
In the dashboard, open the project and add a destination. Anything S3-compatible works — AWS S3, Cloudflare R2, Backblaze B2, MinIO, or your own server.
| Field | Notes |
|---|---|
bucket | The bucket name. |
endpoint | Required for anything other than AWS S3 — R2 and B2 both need one. |
region | Defaults to auto, which is right for R2. |
accessKey | A key with permission to write to that bucket, and nothing more. |
secretKey | Encrypted at rest. Shown back to you only as its last four characters. |
prefix | A folder inside the bucket. Defaults to applooma/. |
Note
Start and stop#
Both are server-side calls with your API key, so a viewer cannot start a recording of a room they are in.
const res = await fetch('https://api.applooma.dev/v1/recordings/start', {method: 'POST',headers: {'x-applooma-key': process.env.APPLOOMA_API_KEY,'x-applooma-secret': process.env.APPLOOMA_API_SECRET,'Content-Type': 'application/json',},body: JSON.stringify({ roomName: 'interview-42' }),});const { recordingId, destination } = await res.json();// destination → { bucket: 'my-recordings', key: 'calls/interview-42/1757…mp4' }
Keep destination. It is the only record of where the file went that you will get from us — we do not hold an index of your objects.
await post('/v1/recordings/' + recordingId + '/stop');
Note
failed. If you record from the moment a channel opens, start it once the host has joined and unmuted rather than when the channel is created.When it will not start
| Code | What it means |
|---|---|
NO_RECORDING_STORAGE | The project has no destination yet. Add one in the dashboard. |
RECORDING_NOT_AVAILABLE | This deployment cannot hold credentials securely. Only relevant if you self-host. |
409 | That channel is already being recorded. |
What it costs#
Recording minutes are billed like channel minutes, and appear under Recording in your usage breakdown. There is no storage line, because we are not storing anything — whatever your provider charges for the object is between you and them.
Why it works this way#
Most platforms record to their own storage and rent it back to you. That is simpler to sell and worse to live with: your users' video sits on someone else's infrastructure, under someone else's retention policy, reachable by someone else's subpoena, and priced by someone else.
Writing to your bucket means the recording is yours from the moment it exists. It also means we cannot help you recover one you deleted — which is the honest trade, and the right way round.