One API key, a typed SDK, signed-URL uploads, resumable multipart, and webhooks — backed by Cloudflare R2.
Every endpoint, generated from the OpenAPI spec.
Manage buckets, API keys, and usage.
import { Storage } from "@product/storage";
const storage = new Storage({ apiKey: "sk_live_…" });
await storage.buckets.create({ name: "avatars", visibility: "public" });
await storage.objects.upload({
bucket: "avatars",
key: "users/42.png",
body: bytes,
contentType: "image/png",
});
// browser direct upload — no bytes through your server
const { url } = await storage.objects.createSignedUrl({
bucket: "avatars", key: "users/42.png", method: "PUT", expiresIn: "15m",
});