PutPut vs the Alternatives
Developers waste hours evaluating file upload services. We did the work for you. Each comparison breaks down pricing, setup time, lock-in, and what actually matters when you just need to upload a file and get a URL.
PutPut vs Amazon S3
S3 is the industry standard for object storage, but it was built for infrastructure engineers, not developers who just need file uploads. PutPut gives you the same presigned upload flow with zero config.
| Feature | PutPut | Amazon S3 |
|---|---|---|
| Signup required | No | Yes (AWS account) |
| Setup time | < 1 minute | 15-30 minutes |
| Lines of code | ~10 lines | ~50 lines |
| SDK needed | No (plain HTTP) | Yes (aws-sdk) |
| Presigned uploads | Built-in | Manual setup |
| Egress fees | $0 | $0.09/GB |
| CORS config | Automatic | Manual XML policy |
| IAM / permissions | Token-based | IAM policies |
| CDN included | Yes | CloudFront extra |
| AI-friendly docs | docs.putput.io | No |
Code comparison
// Get a token (no signup)
const tok = await fetch('/api/v1/auth/guest',
{ method: 'POST' }).then(r => r.json());
// Upload a file
const pre = await fetch('/api/v1/upload/presign',
{ method: 'POST',
headers: { Authorization: `Bearer ${tok.token}` },
body: JSON.stringify({ filename: 'photo.jpg',
content_type: 'image/jpeg' }) }
).then(r => r.json());
await fetch(pre.upload_url,
{ method: 'PUT', body: file });
const result = await fetch('/api/v1/upload/confirm',
{ method: 'POST',
headers: { Authorization: `Bearer ${tok.token}` },
body: JSON.stringify({ upload_id: pre.upload_id }) }
).then(r => r.json());// Install aws-sdk, configure IAM
import { S3Client,
PutObjectCommand } from '@aws-sdk/client-s3';
import { getSignedUrl }
from '@aws-sdk/s3-request-presigner';
const s3 = new S3Client({
region: 'us-east-1',
credentials: {
accessKeyId: process.env.AWS_KEY!,
secretAccessKey: process.env.AWS_SECRET!,
}
});
const cmd = new PutObjectCommand({
Bucket: 'my-bucket',
Key: 'photo.jpg',
ContentType: 'image/jpeg',
});
const url = await getSignedUrl(s3, cmd,
{ expiresIn: 3600 });
await fetch(url,
{ method: 'PUT', body: file });Frequently asked questions
What's the difference between PutPut and Amazon S3?
PutPut is a managed file upload API built on top of Cloudflare R2. Unlike S3, PutPut requires no signup, no IAM configuration, and no SDK — just plain HTTP calls. Egress is $0 on every plan.
Does PutPut have egress fees?
No. PutPut uses Cloudflare R2 which has zero egress fees. S3 charges $0.09/GB for data transfer out.
Is PutPut free?
Yes. PutPut has a free tier with 10 GB storage, 100 MB max file size, unlimited files, and $0 egress. No credit card required.
Do I need an AWS account to use PutPut?
No. PutPut gives you an API token with a single POST request. No AWS account, no IAM roles, no bucket configuration needed.
Can I migrate from S3 to PutPut?
Yes. PutPut uses standard presigned URL uploads, so migration is straightforward. Replace your S3 presign logic with PutPut's presign endpoint.
No signup required. No credit card.