Object Storage
Connect a bucket you own so Taliiq can store and retrieve workspace files
Object Storage
Connect a bucket you own. Taliiq writes only to the paths you grant and never deletes your objects. Session exports land here today as a transcript, system events and a metadata file, organized by day, then agent or squad, then session.
Dashboard path: Settings → Storage (the same providers also appear as cards under Manage → Integrations)
You own the bucket. Encryption at rest, retention, region, access control and any compliance agreement with your storage provider (for example a BAA for healthcare data) are your responsibility. Taliiq only writes to the bucket and never deletes anything in it.
Voice calls also write recording.ogg into the same session folder when the agent has recording enabled and a healthy connection. Standard workspaces keep a Taliiq platform copy for Observe playback and fall back to platform-only recording if no bucket target is available. HIPAA workspaces never fall back to platform storage. Zero-data-retention workspaces do not record calls at all, so no recording.ogg is written; transcript, events and meta.json are still delivered to your bucket at the end of the call.
Supported providers
| Provider | What you provide |
|---|---|
| AWS S3 | Access key ID, secret, region, bucket, optional prefix |
| AWS S3 (STS) | Coming soon. Role ARN, region, bucket, optional prefix. No long-lived keys stored. |
| Azure Blob Storage | Connection string, container, optional prefix |
| Google Cloud Storage | Service account JSON, bucket, optional prefix |
| Cloudflare R2 | Account ID, access key ID, secret, bucket, optional prefix |
| Supabase Storage | S3 endpoint, access key ID, secret, bucket, region, optional prefix |
| S3-compatible | Endpoint, region, access key ID, secret, bucket, optional prefix, path-style toggle |
You can connect several buckets. They form a delivery chain (see Several buckets and fallback).
AWS S3 (STS) is coming soon. The card is listed but cannot be connected yet. Until it ships, use AWS S3 with an access key that has write-only permission on your bucket path (see Least-privilege permissions).
What gets delivered
For every finished session that has a log entry (voice calls, widget chat, email, campaigns, squads and test runs):
{prefix}/2026/09/29/{agent-or-squad-name}-{short-id}/{session-id}/
recording.ogg
transcript.json
events.jsonl
meta.json- The date is the session start in UTC.
- The folder name is the agent or squad name plus a short id, so renaming an agent never splits its history.
recording.oggis the voice recording when recording is enabled for the agent (chat-only sessions skip it).transcript.jsonholds the conversation turns.events.jsonlholds one system event per line (tool calls, handoffs, errors).meta.jsonholds the session id, agent or squad id, channel, start and end time, duration, ended reason and a SHA-256 hash for every other file, so you can verify a file was not changed after delivery. It never includes prompts, provider keys, internal logs or cost breakdowns.
meta.json never includes customer phone numbers, contact details or structured output. The transcript and events are exported exactly as they are stored in Observe, so they contain what was said in the session.
The connect form shows a live example path for the prefix you type.
Connect a bucket
Create a bucket and a dedicated access identity in your provider. Give it the least privilege shown below.
Open Settings → Storage and press Add next to your provider.
Fill in the fields and press Test connection. The result names the check that failed: reach the endpoint, write a file, read it back.
Save. The connection appears on the Storage overview page.
Open an agent, go to Advanced → Storage and confirm the toggles.
Only workspace owners and admins can create, change, reorder, test or delete a storage connection, and never while a support user is impersonating your account. Every change is written to the audit log and raises a notification for owners and admins, because a storage connection decides where your conversation data goes.
Least-privilege permissions
Taliiq needs to write objects. It does not need to list, overwrite existing session files or delete anything.
AWS S3
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:PutObject"],
"Resource": "arn:aws:s3:::YOUR_BUCKET/YOUR_PREFIX/*"
}
]
}Add s3:GetObject on the same resource only if you want the Test connection button to confirm read access. Read is optional.
Google Cloud Storage
Grant the service account a role that contains storage.objects.create on the bucket (for example a custom role with only that permission). Add storage.objects.get only if you want the read check.
Azure Blob
Use a connection string for a storage account or a shared access signature that allows Create and Write on the container. Do not grant Delete.
Cloudflare R2
Create an R2 API token scoped to the single bucket with Object Write. Read is optional.
Taliiq sends a .taliiq/health-check file to test the connection. It overwrites that one fixed file and never needs delete permission.
AWS S3 (STS)
Coming soon. This describes how it will work; the option cannot be connected yet.
Instead of storing an access key, you create an IAM role that Taliiq is allowed to assume. Taliiq requests short-lived credentials (one hour at most) limited to writing under the session's folder.
The connect form shows a trust policy with an ExternalId unique to your workspace. Copy it into the role's trust relationship:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": { "AWS": "arn:aws:iam::TALIIQ_ACCOUNT_ID:role/TALIIQ_ROLE" },
"Action": "sts:AssumeRole",
"Condition": { "StringEquals": { "sts:ExternalId": "YOUR_EXTERNAL_ID" } }
}
]
}The ExternalId prevents another Taliiq customer from pointing Taliiq at your role.
Several buckets and fallback
Open Settings → Storage to see every connection in one list. Drag the rows, or use the arrows, to set the default order.
- Agents on Default use the first enabled and healthy connection in the list and fall back down when a write fails. Agents pinned to one connection skip this order and never fall back to another bucket.
- Use the switch on a row to turn a connection off without deleting it. Turning a connection off never needs a working bucket, but it is refused while an agent is set to use that connection (see Per-agent controls). Turning a connection on is always allowed.
- The Test button on a row runs the connection test again and shows each step: reach the endpoint, write a file, read it back.
- A connection that fails is marked unhealthy and skipped for Default delivery. A background check tests it again and puts it back in the chain when it passes.
- If every connection fails (or a pinned connection keeps failing), the export is marked failed, owners and admins get an alert, and the session data stays in Taliiq. Press Retry export on the session, or wait for the automatic retries.
Per-agent controls
Agent → Advanced → Storage chooses where this agent delivers and what is sent.
Storage connection (first control):
| Choice | Effect |
|---|---|
| Off | Nothing is delivered for this agent |
| Default | Follow the connection order on Settings → Storage and fall back if one fails |
| A specific connection | Deliver only to that connection. On failure Taliiq retries it and never sends data to another bucket |
- An unhealthy connection is greyed out and cannot be newly chosen. Changing the connection (including Off or Default) asks you to confirm first. Files already delivered stay where they are.
- If the chosen connection is later switched off, the agent's sessions are not delivered until you choose another one, and the session shows why. A connection that an agent uses cannot be switched off or deleted until you change that agent. The same holds for a squad, through its member agents, and for inactive agents. The row on Settings → Storage lists the agents that use it, with a link to each one.
Two switches control what is written when delivery is on (both on by default):
| Switch | Effect |
|---|---|
| Save session logs | Deliver events and metadata for this agent's sessions |
| Save transcript | Include transcript.json |
| Save call recording | Write recording.ogg for voice sessions when a connection is available |
A squad session follows the most restrictive setting among all its member agents. If one member has logging off, the squad session is not delivered. If the members choose different specific connections, the squad session is not delivered either, so set the same connection on every member (or leave them on Default).
The controls are disabled with an explanation when you have no connection or when your workspace uses zero data retention.
Data protection modes
| Mode | Transcript / events / meta | Call recording | Observe playback |
|---|---|---|---|
| Standard | Celery export to your bucket after the call (delivery order or agent pin) | One platform egress, then async copy of recording.ogg into the session folder | Platform copy preferred |
| HIPAA | Same as standard; alert if delivery finally fails. You need your own agreement with the storage provider. | Same platform+copy path when a connection is available. No platform recording if no usable tenant target. | Platform copy when present |
| Zero data retention | End-of-call passthrough into your bucket only. Taliiq does not keep transcript or events. | None. Calls are not recorded. | Nothing to play (no recording); the transcript is in your bucket (delivered_private) |
Agents can turn recording, logs or transcript off under Advanced → Storage. Pinned connections never fall back to another bucket.
Retention and your files
Taliiq deletes its own copy of a session when your Observe retention period ends. Files already delivered to your bucket stay there. Taliiq never deletes or expires objects in your bucket, so you decide the lifecycle. Use your provider's lifecycle rules, and enable bucket versioning or Object Lock if you need tamper resistance.
After Taliiq purges a session, the session no longer appears in the Observe view. Use your own tools to read the delivered files.
Security model
| Threat | Control |
|---|---|
| A teammate redirects data to their own bucket | Owner/admin only, blocked while impersonating, audit log entry, notification to owners and admins |
| Leaked Taliiq credentials | Secrets are write-only, encrypted at rest, never shown again, never logged, never sent through queues |
| Over-broad bucket access | Write-only export, fixed health-check file, optional read check |
| Custom endpoint pointed at an internal address | HTTPS only, public addresses only, no redirects, address re-checked and pinned on every connection |
| Path tricks in prefixes | Prefix and names are validated and sanitized. No .., no leading slash |
| File tampering | SHA-256 per file in meta.json, create-only writes where the provider supports them |
| Deleting a connection | Credentials are removed immediately. Delivery history keeps only the provider, bucket and region |
Suspending or deleting a workspace stops delivery and removes the stored connections.
Audit log
Every change to storage is written to Observe → Audit Log, with who did it and when. Secrets are never recorded.
| Event | When |
|---|---|
| Connection created, updated, deleted | Saving or removing a connection |
| Connection enabled or disabled | Using the switch |
| Connections reordered | Changing the delivery order |
| Connection tested | Pressing Test on a saved connection |
| Connection unhealthy or recovered | A failed delivery or test, and when it passes again |
| Agent storage plan changed | Any switch or connection choice on an agent, including when an agent is created with non-default settings. The entry names the connection before and after |
| Export retried | Pressing Retry export on a session |
| Export failed after all retries | Delivery gave up (the alert also goes to owners and admins) |
Troubleshooting
| Symptom | Check |
|---|---|
| Test connection fails on reach | Endpoint spelling, region, firewall on the bucket. Custom endpoints must use HTTPS and a public address |
| Test connection fails on write | The identity has write permission on the prefix path |
| Connection shows unhealthy | Open the row for the last error. It returns to healthy after the next successful test |
| Session shows export failed | Fix the connection, then press Retry export on the session |
| Nothing is delivered | Confirm the agent's storage connection is not Off, that a connection is enabled, and that zero-data-retention workspaces have a healthy bucket (passthrough needs one) |
| Recording missing from the folder | Wait for the background copy after the call, then refresh. Standard mode writes platform audio first, then copies recording.ogg into your session folder |
A zero-data-retention call has no recording.ogg | Expected. Zero-data-retention workspaces do not record calls. The transcript, events and meta.json are in your bucket |

