Now in beta · 50 free operations every month

Every image operation.
One boring, reliable API.

Remove backgrounds, upscale to 4x, and turn product photos into lifestyle shots — with a single POST. No ML infrastructure to run, no model churn to chase. We absorb the chaos; you keep a stable contract.

curl
$ curl -X POST https://api.ezphoto.ai/v1/remove-background \
  -H "Authorization: Bearer ez_live_…" \
  -d '{"image_url": "https://your.app/photo.jpg"}'

# ~1 second later
{
  "request_id": "0f04c41c-…",
  "op": "remove-background",
  "result_url": "https://…/0f04c41c.png",
  "expires_at": "2026-08-14T22:28:13Z"
}

Three operations. Real prices. No surprises.

Send JSON with an image_url, or upload the file directly. Fast ops answer inline; heavy ops return a job you can poll or get webhooked about.

Remove background

$0.01/image

Clean cutouts with refined edges, hair included. Synchronous — the response is the result, typically around a second.

POST /v1/remove-background

Upscale

$0.05/image

2x or 4x upscaling that adds detail instead of blur. Async with webhooks, usually done in a few seconds.

POST /v1/upscale

Product shot

$0.10/image

Turn a plain product photo into a styled scene — studio white, marble table, outdoor lifestyle — or write your own prompt.

POST /v1/product-shot

Integrated before your coffee cools

1

Grab a key

Sign up with an email. 50 free operations a month, no card required.

2

POST an image

A URL or a file — your call. Idempotency keys make retries safe.

3

Get a URL back

Results live on our CDN for 24 hours, then they're gone. We never keep your users' images.

Docs are the product too

Copy, paste, ship. Same shape on every endpoint — full reference here, plus an OpenAPI spec and LLM-ready docs your AI assistant can read directly.

curl -X POST https://api.ezphoto.ai/v1/upscale \
  -H "Authorization: Bearer $EZPHOTO_KEY" \
  -H "Idempotency-Key: order-4812-hero" \
  -d '{"image_url": "https://your.app/photo.jpg", "factor": 4,
       "webhook_url": "https://your.app/hooks/ezphoto"}'
import requests

r = requests.post(
    "https://api.ezphoto.ai/v1/upscale",
    headers={"Authorization": f"Bearer {EZPHOTO_KEY}"},
    json={"image_url": "https://your.app/photo.jpg", "factor": 4},
)
job = r.json()          # 202 -> {"id": "...", "status": "queued"}
const res = await fetch("https://api.ezphoto.ai/v1/upscale", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.EZPHOTO_KEY}` },
  body: JSON.stringify({ image_url: "https://your.app/photo.jpg", factor: 4 }),
});
const job = await res.json(); // 202 -> { id, status: "queued" }

Pricing that fits in your head

Free

$0

50 operations / month

  • All three operations
  • No card required
  • Full API access & webhooks
Start free

Volume plans with pooled credits are coming. Every image has real inference cost — nothing here is "unlimited", and nothing is subsidized by selling your data.

Your images are workload, not training data.

Uploads are processed, delivered, and deleted — results expire after 24 hours and originals are never stored at all. That's not a settings toggle; the storage for anything else simply doesn't exist.