---
title: Quickstart
path: quickstart
status: published
---

# Quickstart

From nothing to a stored object. About five minutes.

## 1. Create a bucket

Sign in to <https://storey.scailabs.ai>, open **Buckets**, and choose
**New bucket**. Pick a name and a location — the region decides where the data
physically lives and cannot be changed later.

Or through the API:

```bash
curl -X POST https://storey.scailabs.ai/api/v1/buckets \
  -H "Content-Type: application/json" \
  -d '{"name": "my-bucket", "region_id": "nlsouth", "tier_id": "standard"}'
```

## 2. Create an access key

Open **Access keys** → **New key**. Choose the same region as your bucket.

**The secret is shown once.** Copy it before closing the dialog — Storey does
not store it and cannot show it again. If you lose it, rotate the key.

## 3. Grant the key access to the bucket

Open the bucket, go to the **Access** tab, choose your key, and grant
**Read & write**. A key with no grant can authenticate but reach nothing.

## 4. Configure your S3 client

Storey uses standard SigV4, so any S3 client works. The endpoint and region come
from the key you created — the console shows both.

**aws-cli**

```bash
aws configure set aws_access_key_id     GK...
aws configure set aws_secret_access_key ...
aws configure set region                nlsouth-std

aws --endpoint-url https://api.nlsouth-std.storey.scailabs.ai \
    s3 cp ./report.pdf s3://my-bucket/reports/report.pdf
```

**boto3**

```python
import boto3

s3 = boto3.client(
    "s3",
    endpoint_url="https://api.nlsouth-std.storey.scailabs.ai",
    aws_access_key_id="GK...",
    aws_secret_access_key="...",
    region_name="nlsouth-std",
)

s3.put_object(Bucket="my-bucket", Key="reports/report.pdf", Body=open("report.pdf", "rb"))
```

**rclone**

```ini
[storey]
type = s3
provider = Other
access_key_id = GK...
secret_access_key = ...
endpoint = https://api.nlsouth-std.storey.scailabs.ai
region = nlsouth-std
```

> **The region string is `nlsouth-std`, not `nlsouth`.** It includes the tier
> because it identifies the cluster, and it is part of the SigV4 signature — a
> mismatch produces a signature error, not a helpful message. Copy it from the
> console rather than typing it.

## 5. Check it worked

```bash
aws --endpoint-url https://api.nlsouth-std.storey.scailabs.ai s3 ls s3://my-bucket/reports/
```

The object should also appear in the console under the bucket's **Objects**
tab, where you can download it, share it, or delete it.

## Common first errors

| What you see | What it means |
|---|---|
| `SignatureDoesNotMatch` | The region string is wrong — use the full `<region>-<tier>` form from the console. |
| `AccessDenied` on a bucket you own | The key has no grant on that bucket, or it belongs to another region. |
| `NoSuchBucket` when creating with `mb` | Buckets are created through the console or management API, not the S3 API. |
| Bucket name rejected | Names are 3–63 characters, lowercase letters, digits and hyphens. No dots. |
