Bucket organization, on-the-fly image transforms, multipart uploads and signed URLs — one API, your infra.
HTTP/2 200 OK
Cache-Control: public, max-age=31536000, immutable
Content-Type: image/webp
X-Sentroy-Bucket: brand-assets
X-Sentroy-Transform: w=1200,fmt=webp,q=82
ETag: "9c2a6f1b4d8e3a"
Vary: AcceptFeatures
Brand assets, user uploads and internal media — all behind one origin.
Per-company isolated buckets, public/private visibility, slug-based routing.
Resize, format conversion (WebP/AVIF), quality, smart-crop — driven by URL params.
3-parallel pool for large files, automatic resume; survives a tab close.
Immutable cache headers, geo distribution, hash-resistant URLs — cold cache is rare in practice.
Time-bound, scoped access — leak-resistant tokens for private buckets.
TypeScript, Python, Go and PHP — every endpoint typed, with examples.
How it works
From the dashboard or SDK — pick visibility and access policy.
Drag-and-drop, multipart upload, or SDK. Crop and tweak inline.
Direct CDN URL, transform via query params, immutable cache headers.
SDK
Multipart upload, transforms, bucket management — single import.
import { Sentroy } from "@sentroy-co/client-sdk"
const sentroy = new Sentroy({
baseUrl: "https://sentroy.com",
companySlug: "acme",
accessToken: process.env.SENTROY_TOKEN!,
})
// Multipart upload (3-paralel pool, otomatik)
const media = await sentroy.media.upload({
bucket: "brand-assets",
file: imageBlob,
filename: "hero.png",
})
// Anında CDN URL — hash-resistant cache
console.log(media.publicUrl)
// → https://cdn.sentroy.com/f/m_9c2a.../originalPricing
Looking for a self-hosted alternative? Start small, grow as you ship.