Image hosting that
scales with your SaaS.
User avatars, screenshots, file attachments — handle it all with a simple API. No egress fees means your costs don't spike when your product takes off.
Get started
Zero egress fees
Your image serving costs stay flat no matter how popular your product gets. No bandwidth penalties, no surprise bills.
Scoped, revocable keys
Label and revoke API keys individually, and use upload-only keys with allowed origins in the browser. Use different keys for staging and production.
Global CDN
Images served from edge locations worldwide. Fast load times for your users no matter where they are.
Simple integration
One API call to upload, one CDN URL back. Drop it into any backend — Node, Python, Go, Ruby, whatever you're running.
Predictable pricing
Flat monthly pricing with generous limits. Start free, upgrade when you need more. No credit-based billing.
Built for developers
Clean REST API, proper error codes, pagination, OpenAPI spec. Everything you'd expect from a modern API.
On-the-fly transforms
Resize and crop avatars, thumbnails, and previews with URL params — ?w=400&fit=cover. No image pipeline to build; WebP/AVIF conversion included.
EU data residency
Your users' images and metadata are stored at rest in the EU — Cloudflare R2 (EU) plus an EU-region Postgres database. GDPR-friendly by default, with cookieless analytics and no consent banner.
Recipes that work today
Replace the path with your own image. Each variant is generated on the first request, then cached at the edge for a year.
Avatars
Square crops sized for your UI, converted to WebP. Use gravity=face instead of auto to center on faces in portrait photos.
.../img_abc123.jpg?w=128&h=128&fit=cover&gravity=auto&fmt=webp In our test, a 128 px WebP avatar was 3.3 KB.
Previews at fixed sizes
Three named sizes, so your UI doesn't hard-code pixel widths.
.../img_abc123.jpg?size=s
.../img_abc123.jpg?size=m
.../img_abc123.jpg?size=l s is 256 px wide, m 640 px, l 1280 px.
Uploads that clean up after themselves
Set a time-to-live and the image is deleted automatically. Good for previews, drafts and temporary exports.
{"url": "https://example.com/draft.png", "expires_in": 3600} From 60 seconds to 30 days. Sent to POST /v1/images with an API key.
Start hosting images in 30 seconds
Free tier: 200 MB storage, 500 uploads/month. No credit card.
Read the quickstart