---
title: Multi-Endpoint S3
description: Connect multiple S3-compatible storage backends from a single Sairo dashboard with per-endpoint credentials and routing.
---

import { Aside } from "@astrojs/starlight/components";

Sairo can connect to multiple S3-compatible endpoints simultaneously, letting you browse and manage storage across different providers or regions from one interface.

<Aside>
  Multi-endpoint management is an **admin-only** feature. Viewer accounts see buckets across all configured endpoints but cannot add, edit, or remove endpoints.
</Aside>

## Adding an endpoint

Navigate to the endpoint management page from the admin settings. Click **Add endpoint** and fill in the connection details:

| Field              | Description                                              |
| ------------------ | -------------------------------------------------------- |
| **Name**           | A human-readable label for this endpoint                 |
| **Endpoint URL**   | The S3-compatible API URL                                |
| **Access Key**     | The access key ID for authentication                     |
| **Secret Key**     | The secret access key                                    |
| **Region**         | The AWS region or equivalent for the endpoint            |
| **Path Style**     | Whether to use path-style addressing (`endpoint/bucket`) instead of virtual-hosted-style (`bucket.endpoint`) |

### Test Connection

Before saving, click **Test Connection** to validate that Sairo can reach the endpoint and authenticate with the provided credentials. The test performs a `ListBuckets` call and reports success or the specific error encountered.

## Default endpoint

The endpoint configured via environment variables (`S3_ENDPOINT`, `S3_ACCESS_KEY`, `S3_SECRET_KEY`) is the **default endpoint**. It is always present in the endpoint list and cannot be deleted. Its credentials can be edited through the UI or updated via environment variables.

## Bucket list

The bucket sidebar groups buckets by endpoint. Each endpoint appears as a collapsible section with the endpoint name as the header. Expand or collapse sections to focus on the storage you are working with.

## URL routing

Non-default endpoints use a namespaced URL pattern so that API calls are routed to the correct backend:

```
/api/e/{endpoint_id}/buckets/{bucket}/objects/...
```

The default endpoint omits the `/e/{endpoint_id}` segment for backward compatibility:

```
/api/buckets/{bucket}/objects/...
```

This means existing bookmarks, API integrations, and share links continue to work without modification after adding new endpoints.
