> ## Documentation Index
> Fetch the complete documentation index at: https://docs.leamout.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Storage

> Connect organization-owned object storage for Voice Agent call recordings.

Leamout supports an organization-owned, S3-compatible storage integration for recordings. You supply the storage endpoint, bucket, region, and access credentials.

## Configure recording storage

Use an organization credential with `storage:write`:

```bash theme={null}
curl -sS -X POST "https://api.leamout.com/v1/storage-integrations/" \
  -H "Authorization: Bearer $LEAMOUT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Recording archive",
    "endpoint_url": "https://storage.example.com",
    "region": "us-east-1",
    "bucket": "voice-recordings",
    "access_key_id": "YOUR_ACCESS_KEY",
    "secret_access_key": "YOUR_SECRET_KEY",
    "use_path_style": false
  }'
```

The endpoint must be an HTTPS origin on a publicly routable host; local and private IP destinations are rejected. The region defaults to `us-east-1` when omitted.

## Test connectivity

After creation, save the integration ID and test its credentials:

```bash theme={null}
curl -sS -X POST "https://api.leamout.com/v1/storage-integrations/$STORAGE_INTEGRATION_ID/test" \
  -H "Authorization: Bearer $LEAMOUT_TOKEN"
```

A successful test returns `data.connected: true`. Test failures are reported as API errors; creating an integration alone does not guarantee remote storage access.

## Manage the integration

You can list, inspect, update, and disable integrations. Normal responses include `has_secret` but do not return the stored secret access key.

An update can change `name`, `access_key_id`, `secret_access_key`, or `status` (`active` or `disabled`). The endpoint, region, bucket, and path-style settings cannot be changed in place because existing recordings may refer to that storage destination.

Only one recording storage integration can be active per organization. If you need a different destination, disable the old integration and create a new one. Deleting an integration disables it; it does not delete the recordings stored in your external bucket.

<Warning>
  Use credentials with access limited to the intended bucket, keep secrets server-side, and do not disable an integration without considering access to historical recordings.
</Warning>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.