media server logo
Toggle documentation navigation
Callaba home

Storages

Use Storages to register reusable S3-compatible destinations for recordings, copied files, and exported media.

What it doesRegister an external storage destination

Choose this whenYou need to register an S3-compatible destination that another module will write to.

Use another module whenUse Files or Recordings to create or copy media; Storages only registers the destination.

1Register the destination2Test credentials3Reference it from a transfer
POST /api/storages/create
6 endpoints

Before you start

All methods require an administrative x-access-token. Prepare a compatible bucket endpoint and credentials with only the permissions required by the workflow. Access and secret keys are write-only values and are not returned by read methods.

What you can do

  • create and update register or change a storage destination.
  • getAll, getCount, and getById inspect configured destinations.
  • remove deletes a destination record.

Example workflow

{
  "name": "Event archive",
  "type": "STORAGE_TYPE_S3",
  "bucket_url": "https://media.example.s3.amazonaws.com",
  "access_key": "ACCESS_KEY_ID",
  "secret_key": "SECRET_ACCESS_KEY",
  "meta_data": {}
}
  1. Create the storage destination before the event.
  2. Copy a small non-production file to it.
  3. Verify the object and access policy at the destination.
  4. Reference the storage identifier from the production transfer workflow.

Common use cases

  • Archive completed recordings in AWS S3 or compatible storage.
  • Separate editorial handoff from long-term retention buckets.
  • Rotate destination credentials without changing workflows that reference the storage destination.

Limits and troubleshooting

Read methods cannot recover stored secret values. Wrong endpoints, bucket policies, regions, credentials, or network rules can make transfers fail even when the destination record exists. Validate with a small copy after every change.

Next steps

Use Files to copy media to this destination and monitor transfer progress.

REST solution recipe

Register reusable object storage

Create an S3-compatible destination once, then reference its id from file-copy and retention workflows.

  1. Register the destinationSave the provider type, bucket URL, and credentials.POST /api/storages/create
  2. Confirm the resourceRead the stored non-secret configuration before using its id.POST /api/storages/getById

Treat access and secret keys as write-only credentials. Verify bucket policy and least-privilege access outside the public docs.

POST
/api/storages/create
Admin token required

Use this method before any recording, archive, or file-transfer workflow is pointed at external storage.

It registers the target, validates bucket and metadata settings, and makes the destination available for production use. The preset examples are the fastest path for common S3-compatible providers such as AWS S3 or Backblaze.

AWS S3 storage target

Use this preset when recordings or copied assets should land in an AWS S3 bucket.

AWS S3 storage target
Copy code
curl --request POST \
--url http://localhost/api/storages/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"name": "AWS media archive",
"type": "STORAGE_TYPE_S3",
"bucket_url": "https://my-media-bucket.s3.us-east-1.amazonaws.com",
"access_key": "AWS_ACCESS_KEY_ID",
"secret_key": "AWS_SECRET_ACCESS_KEY",
"redis_meta_data_url": "redis://localhost:6379/2",
"meta_data": {}
}'
Backblaze storage target

Use this preset when the storage backend is Backblaze and the bucket URL follows the S3-compatible Backblaze endpoint pattern.

Backblaze storage target
Copy code
curl --request POST \
--url http://localhost/api/storages/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"name": "Backblaze media archive",
"type": "STORAGE_TYPE_BACKBLAZE",
"bucket_url": "https://s3.us-east-005.backblazeb2.com/my-media-bucket",
"access_key": "B2_KEY_ID",
"secret_key": "B2_APPLICATION_KEY",
"redis_meta_data_url": "redis://localhost:6379/2",
"meta_data": {}
}'
Request body parameters
Identity
name
string
Copy direct link

Dashboard label: Storage Name.

The unique storage name. The backend validates a constrained name pattern and length before creating the storage object.

Location
type
string
Copy direct link

Dashboard label: Location.

Real product values include STORAGE_TYPE_S3, STORAGE_TYPE_BACKBLAZE, and an internal-disk type used as a model default.

bucket_url
string
Copy direct link

Dashboard label: Bucket URL.

Full bucket URL for the storage target.

Credentials
access_key
string
Copy direct link

Dashboard label: Access key (Key ID).

Write-only credential field used when the storage is created or updated.

secret_key
string
Copy direct link

Dashboard label: Secret key (App key).

Write-only credential field used when the storage is created or updated.

Metadata backend
redis_meta_data_url
string
Copy direct link

Dashboard label: Metadata URL.

Redis metadata backend used by the storage mounting layer.

meta_data
object
Copy direct link

Optional metadata object stored with the storage target.

Create storage
Copy code
curl --request POST \
--url http://localhost/api/storages/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"name": "AWS media archive",
"type": "STORAGE_TYPE_S3",
"bucket_url": "https://my-media-bucket.s3.us-east-1.amazonaws.com",
"access_key": "AWS_ACCESS_KEY_ID",
"secret_key": "AWS_SECRET_ACCESS_KEY",
"redis_meta_data_url": "redis://localhost:6379/2",
"meta_data": {}
}'
Response
Identity
_id / id / name
mixed
Copy direct link

Storage object identifiers and the saved storage name.

Location
type / bucket_url / folder_name
mixed
Copy direct link

Storage type, bucket URL, and the normalized folder name derived from the storage name.

Metadata backend
redis_meta_data_url / meta_data
mixed
Copy direct link

Saved metadata backend fields for the storage object.

Runtime
created
string
Copy direct link

Creation timestamp managed by the backend.

Security
credential material
not returned in later lookups
Copy direct link

The create and update flows accept credentials, but list and lookup methods intentionally avoid returning the secret fields back to the client.

Response: Create storage
JSON
Copy code
{
"_id": "6a0011223344556677889900",
"id": "6a0011223344556677889900",
"name": "AWS media archive",
"type": "STORAGE_TYPE_S3",
"bucket_url": "https://my-media-bucket.s3.us-east-1.amazonaws.com",
"redis_meta_data_url": "redis://localhost:6379/2",
"meta_data": {},
"folder_name": "aws-media-archive",
"created": "2026-03-24T18:00:00.000Z",
"success": true
}
POST
/api/storages/getCount
Admin token required
POST
/api/storages/getAll
Admin token required
POST
/api/storages/getById
Admin token required
POST
/api/storages/update
Admin token required
DELETE
/api/storages/remove
Admin token required