Use any S3 client.
Access your dosya.dev files with AWS CLI, boto3, rclone, or any S3-compatible tool. Drop-in replacement with zero code changes.
Generate S3 Keys
Settings > API Keys > S3 Configure Client
endpoint: dosya.dev/s3 Use S3 Commands
aws s3 ls, cp, sync ... Connect with S3 credentials
Generate S3 credentials from your API key in dashboard settings. Uses standard AWS Signature V4 authentication.
https://dosya.dev/s3
DOSYA_XXXXXXXXXXXXXXXX
your_s3_secret_key
us-east-1
wks_your_workspace_id
Required (forcePathStyle: true)
Configure AWS CLI
Set up the AWS CLI with your dosya.dev S3 credentials. Works with AWS CLI v2.
# Configure AWS CLI with your dosya.dev S3 credentials
$ aws configure
AWS Access Key ID: DOSYA_XXXXXXXXXXXXXXXX
AWS Secret Access Key: your_s3_secret_key
Default region name: us-east-1
Default output format: json
# Set the custom endpoint (add to ~/.aws/config or use --endpoint-url)
$ export AWS_ENDPOINT_URL=https://dosya.dev/s3 Use with AWS CLI
All standard S3 commands work out of the box. List, upload, download, sync, and manage your files.
# List all buckets (workspaces)
$ aws --endpoint-url https://dosya.dev/s3 s3 ls
# List files in a workspace
$ aws --endpoint-url https://dosya.dev/s3 s3 ls s3://wks_your_workspace_id/
# List files in a subfolder
$ aws --endpoint-url https://dosya.dev/s3 s3 ls s3://wks_your_workspace_id/Documents/ # Upload a single file
$ aws --endpoint-url https://dosya.dev/s3 s3 cp \
./report.pdf s3://wks_your_workspace_id/Documents/report.pdf
# Upload an entire folder
$ aws --endpoint-url https://dosya.dev/s3 s3 cp \
./my-folder/ s3://wks_your_workspace_id/my-folder/ --recursive
# Sync a local directory (upload only new/changed files)
$ aws --endpoint-url https://dosya.dev/s3 s3 sync \
./backups/ s3://wks_your_workspace_id/backups/ # Download a single file
$ aws --endpoint-url https://dosya.dev/s3 s3 cp \
s3://wks_your_workspace_id/Documents/report.pdf ./report.pdf
# Download an entire folder
$ aws --endpoint-url https://dosya.dev/s3 s3 cp \
s3://wks_your_workspace_id/Documents/ ./docs/ --recursive # Delete a file
$ aws --endpoint-url https://dosya.dev/s3 s3 rm \
s3://wks_your_workspace_id/old-file.txt
# Copy a file within a workspace
$ aws --endpoint-url https://dosya.dev/s3 s3 cp \
s3://wks_your_workspace_id/report.pdf \
s3://wks_your_workspace_id/Archive/report-backup.pdf
# Move a file (copy + delete)
$ aws --endpoint-url https://dosya.dev/s3 s3 mv \
s3://wks_your_workspace_id/temp.txt \
s3://wks_your_workspace_id/Archive/temp.txt Use with any S3 SDK
Works with every language that has an S3 SDK. Just point the endpoint to dosya.dev.
// Node.js / TypeScript with @aws-sdk/client-s3
import { S3Client, ListObjectsV2Command, PutObjectCommand } from "@aws-sdk/client-s3";
import { readFileSync } from "fs";
const client = new S3Client({
endpoint: "https://dosya.dev/s3",
region: "us-east-1",
credentials: {
accessKeyId: "DOSYA_XXXXXXXXXXXXXXXX",
secretAccessKey: "your_s3_secret_key",
},
forcePathStyle: true,
});
// List files
const list = await client.send(new ListObjectsV2Command({
Bucket: "wks_your_workspace_id",
Prefix: "Documents/",
}));
// Upload a file
await client.send(new PutObjectCommand({
Bucket: "wks_your_workspace_id",
Key: "Documents/report.pdf",
Body: readFileSync("./report.pdf"),
})); # Python with boto3
import boto3
client = boto3.client("s3",
endpoint_url="https://dosya.dev/s3",
aws_access_key_id="DOSYA_XXXXXXXXXXXXXXXX",
aws_secret_access_key="your_s3_secret_key",
region_name="us-east-1",
)
# List files
response = client.list_objects_v2(
Bucket="wks_your_workspace_id",
Prefix="Documents/",
)
# Upload a file
client.upload_file(
"./report.pdf",
"wks_your_workspace_id",
"Documents/report.pdf",
) Use with rclone
Configure dosya.dev as an S3-compatible rclone remote for sync, mount, and backup.
# rclone.conf
[dosya-s3]
type = s3
provider = Other
access_key_id = DOSYA_XXXXXXXXXXXXXXXX
secret_access_key = your_s3_secret_key
endpoint = https://dosya.dev/s3
force_path_style = true
# Then use like any other rclone remote
$ rclone ls dosya-s3:wks_your_workspace_id/
$ rclone copy ./backups dosya-s3:wks_your_workspace_id/backups/
$ rclone sync ./docs dosya-s3:wks_your_workspace_id/docs/ Third-party S3 clients
Use any S3-compatible GUI client. Here are the connection details.
# Cyberduck / Mountain Duck / WinSCP
1. Protocol: Amazon S3
2. Server: dosya.dev
3. Port: 443
4. Path: /s3
5. Access Key ID: DOSYA_XXXXXXXXXXXXXXXX
6. Secret Key: your_s3_secret_key Supported operations
Core S3 API operations for managing objects and multipart uploads.
ListBuckets List all workspaces you have access to.
ListObjectsV2 List files with prefix, delimiter, and pagination support.
GetObject Download files with ETag and conditional request support.
HeadObject Get file metadata without downloading the body.
PutObject Upload files. Intermediate folders are created automatically.
DeleteObject Delete files (soft-delete). Idempotent — always returns 204.
CopyObject Duplicate files on the server without downloading.
Multipart Upload Upload large files in parts. Create, upload parts, complete or abort.
HeadBucket Check if a workspace exists and you have access.
API key scopes
Permission mapping
| Operation | read | upload | full |
|---|---|---|---|
| ListBuckets | ✓ | ✓ | ✓ |
| ListObjectsV2 | ✓ | ✓ | ✓ |
| GetObject (download) | ✓ | ✓ | ✓ |
| HeadObject | ✓ | ✓ | ✓ |
| PutObject (upload) | ✕ | ✓ | ✓ |
| DeleteObject | ✕ | ✕ | ✓ |
| CopyObject | ✕ | ✕ | ✓ |
| Multipart Upload | ✕ | ✓ | ✓ |
Limitations & notes
| Path style only | Virtual-hosted bucket style is not supported. Use path style (forcePathStyle: true). |
| Bucket = Workspace | S3 bucket names are your workspace IDs (wks_xxx). You cannot create or delete buckets. |
| Auto-create folders | Uploading to a/b/c.txt automatically creates folders a/ and a/b/ if needed. |
| Locked files | Files locked via the dashboard cannot be modified or deleted via S3. |
| Rate limiting | 600 requests per minute per user, 1200 per minute per IP. |
| Separate credentials | S3 credentials are generated separately from your API key (dos_xxx). |