Quickstart
From signup or invitation to a stored object. Five minutes, in your language.
1. Join or create an organisation
- Sign up with an approved company email, or accept an invitation from an existing organisation. Production signup is restricted to approved domains during the internal rollout.
- Verify your email. A new organisation receives storage capacity only after verification; sign in when the confirmation page completes.
- The first verified user is the owner. Owners and admins invite teammates from the Team page instead of sharing credentials or creating duplicate organisations.
2. Get a bucket and a credential
- In the dashboard, create a bucket. Buckets are made here rather than through the S3 API —
CreateBucketis refused at the edge, because a bucket needs a storage account and CORS rules that only the control plane can allocate. - Create a credential and choose its scope: which buckets it may touch, whether it may write or only read, and when it expires. This is how access is expressed here — there are no bucket policies. See credentials & scopes.
- Copy the secret when it is shown. It is shown once, and there is no way to read it back — rotate the credential if you lose it.
3. Set five environment variables
example values
export AWS_ACCESS_KEY_ID=PCAK00EXAMPLEKEYID00
export AWS_SECRET_ACCESS_KEY=<your secret access key>
export AWS_ENDPOINT_URL=https://s3.canada.popcloud.ca
export AWS_REGION=canada
export POPCLOUD_BUCKET=pc-your-org-mediaThese are example values. Sign in and every snippet on this site fills in with your own endpoint, key and bucket.
Signed in, this block and every snippet below fill in with your real endpoint, access key id and bucket name.
4. Point your code at it
not run in CI
# macOS
brew install awscli
# Linux
curl -fsSL 'https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip' -o awscliv2.zip
unzip -q awscliv2.zip && sudo ./aws/install verified
# One named profile, and every command below uses it.
aws configure set profile.popcloud.aws_access_key_id "$AWS_ACCESS_KEY_ID"
aws configure set profile.popcloud.aws_secret_access_key "$AWS_SECRET_ACCESS_KEY"
aws configure set profile.popcloud.region "$AWS_REGION"
aws configure set profile.popcloud.endpoint_url "$AWS_ENDPOINT_URL"
# Recommended for predictable custom-endpoint behavior. PopCloud also accepts
# virtual-hosted requests for ordinary single-label bucket names.
aws configure set profile.popcloud.s3.addressing_style path
# AWS CLI can otherwise fall back to the legacy S3 presigner for a custom
# endpoint. PopCloud accepts SigV4 only, matching modern AWS regions.
aws configure set profile.popcloud.s3.signature_version s3v4 verified
aws s3 cp ./local-file.bin "s3://$BUCKET/${PREFIX}key.bin" --profile popcloud
# A whole directory, in parallel, skipping what is already there.
aws s3 sync ./public "s3://$BUCKET/${PREFIX}public/" --profile popcloudThat is the whole integration. The AWS CLI page has downloads, listing, presigned URLs and the caveats that apply.
If something fails immediately
The most common first-run failure is a bucket or credential mismatch. Start with the bucket-scoped credential and endpoint in your connection profile.
- You’ll see
- 405 MethodNotAllowed from CreateBucket or DeleteBucket — `aws s3 mb`, `mc mb`, or a tool provisioning its own bucket on first run.
- Why
- Bucket lifecycle belongs to the control plane, which also allocates the storage account, the data-plane key and the CORS rules that come with it. Letting the edge create buckets would create half of one.
- Instead
- Create buckets in the dashboard, or with `POST /v1/buckets` on the control-plane API. Everything object-level then works normally against that bucket.
Anything else: the error reference is organised by what you are seeing rather than by what we call it.