Custom Object Storage
Custom Object Storage
By default, MeetStream stores recordings, transcripts, screenshots, chat logs, and meeting manifests in MeetStream-managed storage. Custom object storage sends new artifacts to a bucket you control. Your existing bot and media fetch calls continue to work.
Add and manage storage destinations in the MeetStream dashboard. The public API and SDK do not configure storage destinations.
Supported providers
You can save up to 10 destinations, including more than one bucket from the same provider. One destination is the default for new bots. Manage destinations and the default in the dashboard. To use another saved destination for a bot, pass its storage_config_id when creating the bot.
1. Prepare your bucket and credentials
Create a bucket in your organization’s storage account. Give MeetStream credentials that can write to the configured object-key prefixes. For read_write mode, the credentials also need object read access.
- Amazon S3: Create an IAM access key pair or an IAM role with access to the bucket and prefixes. See the Amazon S3 permissions example.
- Alibaba Cloud OSS: Create a bucket in the target region and a RAM AccessKey pair with an appropriate policy. Use the OSS region ID. See the OSS permissions example.
- Cloudflare R2: Create an R2 bucket and an R2 S3 API token with Object Read & Write permission. Save its access keys and your Cloudflare account ID. See the Cloudflare R2 setup guide.
2. Add a destination in the dashboard
- Open Custom Storage in the MeetStream dashboard.
- Add a destination and choose Amazon S3, Alibaba Cloud OSS, or Cloudflare R2.
- Enter the bucket details and credentials. Optionally give the destination a name, set the access mode, and choose a base prefix or separate prefixes for audio, video, transcripts, and metadata.
- Save the destination. MeetStream validates access before saving it.
The first destination becomes the default. Adding another destination keeps the current default unless you select the new destination as the default. Use the dashboard to edit a destination, change the default, or remove one. To switch an existing destination to another provider, add a new destination.
For OSS, the default compatible endpoint is https://s3.oss-<region>.aliyuncs.com. For R2, MeetStream uses https://<ACCOUNT_ID>.r2.cloudflarestorage.com. Keep storage credentials in the dashboard; never expose them in client code.
Access modes and validation
MeetStream checks credentials and access to each configured prefix before saving a destination. Invalid credentials or missing bucket permissions prevent it from being saved. Credentials must remain valid while bots run and whenever you later fetch their artifacts.
Scope policies to the prefixes you configure. Amazon S3 read_write needs bucket access and object read/write access; OSS can validate object operations even when a prefix-scoped policy denies HeadBucket. Grant object deletion where possible so temporary validation objects can be cleaned up. R2 requires successful write, read, and delete probes.
3. Choose a saved destination for a bot
Storage setup happens in the dashboard. When creating a bot through the API, you can select one of your saved destinations with storage_config_id:
Omit storage_config_id to use your default destination. If you have no custom storage configured, the bot uses MeetStream-managed storage. Changing the default later affects future bots.
4. Find and fetch artifacts
MeetStream writes artifacts under the category’s effective prefix and bot ID:
With the default meetstream prefix, audio, video, metadata, screenshots, and transcripts share a bot directory. Category prefixes let you separate them. Existing artifacts stay in the bucket and prefix used when they were processed; changing a default does not move them.
Your media fetch calls do not change. In read_write mode, MeetStream returns provider-generated presigned URLs for recordings and reads JSON artifacts from the bucket. In write_only mode, MeetStream fetch endpoints return 403. Presigned URL lifetimes vary by artifact; see Usage & Retention. Call the fetch endpoint again for a fresh URL.
5. Manage destinations
Use Custom Storage in the dashboard to view saved destinations, change the default, update credentials, or remove a destination. Removing the default selects the oldest remaining destination. Removing the last one returns future bots to MeetStream-managed storage. Previously written objects are not deleted.
If you replace a bucket or credentials, make sure the replacement credentials can still reach earlier buckets when you need to fetch older media.
Troubleshooting
- The dashboard cannot save a destination: Confirm the bucket, region, credentials, and object permissions. For R2-specific checks, see Cloudflare R2 troubleshooting.
- An OSS bucket fails validation: Check the OSS region ID, RAM policy, and S3-compatible endpoint. A prefix-scoped policy may deny
HeadBucket; grant the required object operations. - A fetch returns
403: Check whether the destination iswrite_only, whether the presigned URL expired, and whether credentials still have read access. For browser requests to R2, see Cloudflare R2 troubleshooting. - Files are missing from a new bucket: Only artifacts processed after the change use the new destination. Earlier artifacts remain in their original bucket.
