Quickstart
Create a bucket, upload an image, request a resized variant by URL. That is the whole product.
# upload
curl -T photo.jpg https://api.framebox.dev/v1/b/demo/photo.jpg \
-H "Authorization: Bearer $TOKEN"
# fetch a 640px-wide AVIF
https://cdn.framebox.dev/demo/photo.jpg?w=640&fmt=avif
Uploading
PUT the file to /v1/b/<bucket>/<key>. Keys may contain slashes; the original is kept untouched and used as the transform source.
Transforms
Query parameters compose left to right:
w, h | target width / height in px |
fit | cover · contain · fill |
q | quality 1–100 (default 82) |
fmt | avif · webp · jpeg · auto |
dpr | device pixel ratio multiplier |
Formats
With fmt=auto (the default) we pick AVIF, then WebP, then JPEG based on the client Accept header. Variants are cached separately per format.
HTTP API
GET /v1/b/{bucket} list objects
PUT /v1/b/{bucket}/{key} upload
GET /v1/b/{bucket}/{key}/meta object metadata
DEL /v1/b/{bucket}/{key} delete
GET /status service status (JSON)
Responses are JSON. Errors follow {"error":{"code","message"}}.
Limits
Max source 25 MB (Starter) / 100 MB (paid). Max output dimension 8192 px. Rate limit 60 transforms/s per bucket on Starter.