Skip to main content
Blob Storage speaks the S3 API at https://s3-blob.squarecloud.app. Any tool that lets you set a custom endpoint works: aws-cli, boto3, the AWS SDK for JavaScript, rclone, Cyberduck and most backup tools.

Credentials

S3 tools sign requests with an access key pair. Get it from S3 Credentials:
The pair is derived from your API key. It needs no separate management: revoking or regenerating the key does the same to the pair, and the pair gets the same scopes. A key with only blob:read gives a read-only pair. The pair doesn’t change while the API key doesn’t change, so fetch it once and keep it in your secret manager or in an environment variable. Don’t call the route on every boot: it accepts 10 requests per hour.

Buckets

Your account sees three fixed buckets. You can’t create or delete buckets. A key in the public or private bucket is the object path without your user id: images/logo.png in the public bucket is the object pub/<user_id>/images/logo.png on the REST API. Files written over S3 appear on the REST API and in the dashboard, and the other way around.

Configuration

boto3 needs signature_version="s3v4" for presigned URLs: without it, generate_presigned_url signs with the older SigV2, which the gateway doesn’t accept. Presigned URLs last up to 7 days (604800 seconds).
Gateway responses are never cached at the edge. A presigned URL stops working exactly when it expires, when the API key is revoked or when the object is deleted.

Supported operations

Bucket policies, CORS, lifecycle, website, encryption, object lock, versions, logging, notifications, replication, ACL and tag writes, GET by partNumber and browser POST form uploads answer 501 NotImplemented. Use account settings for lifecycle rules.

Keys

  • Keys are literal paths. A key can have up to about 1000 bytes: the 1024-byte limit counts the account prefix too. A longer key answers KeyTooLongError, and its message says the exact number of bytes you have. Segments can’t be empty, . or ...
  • A 0-byte key ending in / is a folder marker, the way the AWS console creates folders.
  • The served Content-Type is derived from the extension, as on the REST API. Executables are refused with InvalidArgument and .html, .svg and .xml are served as downloads.

Metadata, cache and expiry

  • x-amz-meta-* headers are kept on Pro and Enterprise (up to 5 keys and 512 bytes, otherwise MetadataTooLarge). On other plans they are dropped.
  • Cache-Control and Content-Disposition are kept. An uncached Cache-Control (no-cache, no-store or max-age=0) outside Enterprise is refused with AccessDenied.
  • Rules per prefix apply to objects written over S3, including automatic deletion. A rule’s max_size and extensions apply to REST uploads only.

Limits

Past a limit the gateway answers SlowDown (HTTP 503), and the AWS SDKs back off and retry on their own. S3 requests don’t count against your plan’s API request limit. Check the key pair before retrying in a loop: an IP that sends too many invalid credentials is blocked for a few minutes.

Part size

Multipart tools split big files on their own; keep each part at 80 MB or less. The defaults of the AWS CLI (8 MB) and rclone (5 MB) already fit.
Writing needs a paid plan. Without one, and on the read-only legacy bucket, writes answer AccessDenied. Storage quota applies as on the REST API.

Errors

The gateway answers standard S3 XML errors, so SDKs handle them natively: