There is no SDK and no client library. You create a bucket that points at images you already host, then ask for a size by editing the URL. This page lists every parameter Sizy accepts and what it does when you leave one out.
your-bucket is the name you chose when you created the bucket. path/to/image.jpg is the path of the image relative to your source — Sizy appends it to the source URL exactly as written, so an image at https://cdn.example.com/photos/beach.jpg behind a bucket sourced at https://cdn.example.com is reached at /your-bucket/photos/beach.jpg.
Requests are plain GETs. There is no API key on the image URL — a bucket is a public front for a source you already serve publicly.
From /dashboard, create a bucket with two fields:
https://cdn.example.com or an S3 website endpoint. A trailing slash is stripped for you. Anything the public internet can fetch over HTTP works; nothing is copied or migrated, and your originals stay where they are.A bucket is live as soon as it is saved. Deleting a bucket stops its URLs from resolving.
widthdefault: Source widthWhole number of pixels
Alias: w. They are the same parameter, and if you send both the short form wins — w=400&width=800 renders 400. Send one.
heightdefault: Source heightWhole number of pixels
Alias: h, with the same rule — h wins over height if both appear.
Give one dimension and the other is derived from the source aspect ratio. Give both and fit decides what happens to an image that does not match that shape.
fitdefault: covercover · contain · fill · inside · outside
How the image is made to fit the box. cover crops to fill it, contain pads to fit inside it, fill stretches to it, inside and outside scale without cropping.
positiondefault: centercenter · top · right top · right · right bottom · bottom · left bottom · left · left top, plus the compass names north, northeast, east, southeast, south, southwest, west, northwest
Where the crop is anchored when fit=cover discards part of the image. Multi-word values need URL encoding: position=left%20top.
gravitydefault: centercenter · north · northeast · east · southeast · south · southwest · west · northwest
A compass-only alias for position, kept for compatibility. position is read first; gravity is used only when position is absent. Prefer position in new code.
backgrounddefault: Opaque blackAny CSS colour string, e.g. #ffffff, white, rgba(0,0,0,0.5)
The colour behind the image when fit=contain leaves empty space. An unrecognised colour fails the render and returns 500, so encode the # as %23.
formatdefault: Negotiated from the Accept header, else the source formatavif · webp · jpeg · png
Forces the output container. An explicit format always beats negotiation, so use it when you need a URL to return the same bytes to every client. Any other value returns 400.
withoutEnlargementdefault: falsetrue · 1 · yes · false · 0 · no, or the bare parameter
Never scale an image up past its source dimensions. Sending the parameter with no value — ?withoutEnlargement — reads as true.
fastShrinkOnLoaddefault: falsetrue · 1 · yes · false · 0 · no, or the bare parameter
Use the JPEG decoder’s shrink-on-load path for large downscales. Faster and cheaper in memory, at a small cost in quality.
By default you do not need any of these. Sizy reads the Accept header the browser already sends and serves AVIF where it is offered, then WebP, and the source format to everything else — which is usually the largest saving available on an image, often larger than the resize.
Each format is stored as its own object and every response carries Vary: Accept, so no cache between Sizy and your visitor can serve one browser’s AVIF to a browser that cannot decode it. It is still one billable transform per URL — you are not charged again because a visitor arrived in a different browser.
Two sources are never converted. An animated GIF would lose every frame but the first, and an SVG is vector — rasterising it is a different decision, not an optimisation.
The normal response. Sizy redirects to a signed URL for the rendered image in its own storage. The signature is valid for 15 minutes, so follow the redirect rather than saving the target — browsers and image tags do this for you. Keep pointing at the sizy.io URL.
A parameter was present but not accepted — a width that is not a number, a fit outside the five listed values, or a format outside avif, webp, jpeg and png. The body is a plain-text message naming the parameter.
No active bucket with that name, or the name is one Sizy reserves for itself (see below).
When the fetch from your source URL fails, Sizy answers with the status your origin gave — so a missing file at your origin surfaces as a 404 here, and a 403 stays a 403.
The source responded but the file could not be rendered — it is not an image Sharp understands, or a parameter such as background is not a colour.
A 400×300 thumbnail, cropped from the centre
https://sizy.io/your-bucket/photos/beach.jpg?width=400&height=300
The same box, but anchored to the top so faces survive the crop
https://sizy.io/your-bucket/photos/team.jpg?width=400&height=300&position=top
Fit the whole image inside the box and pad it with white
https://sizy.io/your-bucket/products/lamp.png?width=600&height=600&fit=contain&background=%23ffffff
Width only — height follows the source aspect ratio
https://sizy.io/your-bucket/photos/beach.jpg?w=1200
In an image tag, with a 2× source for retina screens
<img src="https://sizy.io/your-bucket/photos/beach.jpg?w=600" srcset="https://sizy.io/your-bucket/photos/beach.jpg?w=1200 2x" alt="Beach" />
These names are used by the site itself and always return 404 as a bucket:
assetsavatarsimagesfilesfavicon.ico.well-knowndevpublicSo that this page is the whole truth rather than the flattering part of it:
format, but not how hard it is compressed.sizy.io.Every account gets 5,000 transforms free each month, and delivery is never billed at all. Beyond the allowance you pay for transforms and nothing else, with no monthly fee. See pricing, or compare it against the other image CDNs.
Your dashboard breaks both numbers down by month and by bucket.