Home

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, htarget width / height in px
fitcover · contain · fill
qquality 1–100 (default 82)
fmtavif · webp · jpeg · auto
dprdevice 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.