Set your storage configuration
Point MeetingBaas at object storage you own.
From the next bot onwards, every artifact we produce for you — recording, audio chunks, raw and diarized transcripts, screenshots and bot logs — is written to your buckets with your credentials. Nothing lands in MeetingBaas storage.
Verified before it is accepted. The ingest key writes a small marker object into each bucket and the service key reads, writes and deletes it — each operation exercised with the credential that will really perform it, which also catches two key pairs that point at different buckets. Ingest upload receives recordings; service upload writes transcripts and reconciled artifacts; read serves artifacts; and delete enforces data retention. If any step fails the request returns 400 with the reason and your existing configuration is left untouched.
Settings: endpoint, region and force_path_style are the same knobs as a self-hosted deployment. Any S3-compatible provider works; enable force_path_style for MinIO, Ceph and most self-hosted gateways. The three buckets may all be the same bucket — keys are prefixed with the bot id regardless.
Two credentials. The ingest key is write-only (s3:PutObject, s3:PutObjectTagging, s3:AbortMultipartUpload) and is the only one that leaves our infrastructure — it is handed to the recording bot, which runs a browser inside your meeting. Scoped this way, a compromised bot can add objects and nothing else. The service key (s3:GetObject, s3:ListBucket, s3:PutObject, s3:DeleteObject) stays in our API and does everything else: serving your recordings back, writing transcripts, and deleting artifacts when your retention period expires.
Keep the buckets private — artifacts are served through short-lived signed URLs — but they must be reachable from the public internet, because transcription providers fetch audio directly from a signed URL.
Data residency. By default (allow_transient_spill: false) nothing you record ever rests on MeetingBaas storage: if an upload to your bucket fails and retries are exhausted, the artifact is reported as failed and lost rather than parked on our infrastructure. Set it to true if you would rather we hold a copy until the upload can be retried.
Replacing a configuration is safe. Calling this again supersedes the previous configuration for new bots only. Bots recorded earlier keep resolving to the storage they were written to, so their artifacts stay readable and deletable — nothing is migrated or re-pointed.
Returns 200 with the stored configuration.
Authorization
ApiKeyAuth Your Meeting BaaS API key. Get one from your account settings.
In: header
Request Body
application/json
Point MeetingBaas at object storage you own.
Every artifact produced for your bots from this point on — recordings, audio chunks, transcripts, screenshots and logs — is written to these buckets instead of ours.
Two credentials are required, scoped by where they end up. The ingest key is write-only and is the only one that leaves our infrastructure: it is handed to the recording bot, which runs a browser inside your meeting. The service key stays in our API and does everything else — serving your recordings back, writing transcripts, and deleting artifacts when your retention period expires.
Both are verified before the configuration is accepted: the ingest key writes a marker object and the service key reads, writes and deletes it.
Bots recorded before this call keep reading from wherever they were written, so setting, changing or removing a configuration never breaks existing artifacts.
Whether MeetingBaas may hold a recording on its own storage when an upload to your buckets fails, until it can be retried.
Defaults to false: nothing you record ever rests outside your account, and an upload that exhausts its retries is reported as failed and lost. Set true only if you would rather keep the recording than hold that guarantee.
falseThe bucket to store recordings and transcripts in.
May be the same as the other buckets — object keys are prefixed with the bot id either way.
1 <= length <= 255The bucket to store audio chunks in.
May be the same as the other buckets — object keys are prefixed with the bot id either way.
1 <= length <= 255The S3(-compatible) endpoint to upload to.
Include the scheme. For AWS this is the regional endpoint (https://s3.<region>.amazonaws.com); for other providers use the one they document.
uriUse path-style addressing (https://endpoint/bucket/key) instead of virtual-hosted style (https://bucket.endpoint/key).
AWS and Scaleway work with the default; MinIO, Ceph and most self-hosted gateways require this to be true.
falseThe access key ID of the ingest credential (needs PutObject, PutObjectTagging and AbortMultipartUpload — no read, no delete).
1 <= length <= 256The matching secret for the ingest credential.
Stored encrypted and never returned by this API — read the configuration back and you get the access key IDs only.
1 <= length <= 512The bucket to store bot logs in.
May be the same as the other buckets — object keys are prefixed with the bot id either way.
1 <= length <= 255The region the buckets live in.
1 <= length <= 64The access key ID of the service credential (needs GetObject, ListBucket, PutObject and DeleteObject).
1 <= length <= 256The matching secret for the service credential.
Stored encrypted and never returned by this API — read the configuration back and you get the access key IDs only.
1 <= length <= 512Response Body
application/json
application/json
application/json
application/json
curl -X PUT "https://api.meetingbaas.com/v2/storage-config" \ -H "Content-Type: application/json" \ -d '{ "artifacts_bucket": "acme-meeting-artifacts", "audio_chunks_bucket": "acme-meeting-audio-chunks", "endpoint": "https://s3.eu-west-3.amazonaws.com", "ingest_access_key_id": "AKIAIOSFODNN7EXAMPLE", "ingest_secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "logs_bucket": "acme-meeting-logs", "region": "eu-west-3", "service_access_key_id": "AKIAI44QH8DHBEXAMPLE", "service_secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" }'{
"data": {
"allow_transient_spill": true,
"artifacts_bucket": "string",
"audio_chunks_bucket": "string",
"created_at": "string",
"enabled": true,
"endpoint": "string",
"force_path_style": true,
"ingest_access_key_id": "string",
"last_error_at": "string",
"last_error_message": "string",
"last_verified_at": "string",
"logs_bucket": "string",
"region": "string",
"service_access_key_id": "string",
"storage_config_id": "string",
"updated_at": "string"
},
"success": true
}{
"code": "string",
"error": "string",
"message": "string",
"statusCode": 9007199254740991,
"success": false
}{
"code": "string",
"details": "string",
"error": "string",
"message": "string",
"retryAfter": 9007199254740991,
"statusCode": 9007199254740991,
"success": false
}{
"code": "string",
"details": "string",
"error": "string",
"message": "string",
"statusCode": 9007199254740991,
"success": false
}