Developer API
Remove backgrounds, upscale photos and restore old pictures with a single HTTP call. Binary in, binary out — no SDK required, no account, no subscription.
The API is in beta: the three endpoints below are stable, but we may add
fields and headers. Breaking changes will get a new version prefix (/api/v2/),
never a silent change to v1. Images are processed transiently and never stored.
Quickstart
Buy a pack below, copy your key from the confirmation page (it is shown exactly once), then:
POST /api/v1/remove-background — Remove background
Cuts out the subject and returns a PNG with a transparent background.
curl -X POST https://everyimg.studio/api/v1/remove-background \
-H "Authorization: Bearer eik_live_YOUR_KEY" \
-H "Content-Type: image/jpeg" \
--data-binary @photo.jpg \
-o cutout.png POST /api/v1/upscale — Upscale
Enlarges a photo 2× (default) or 4× with AI-recovered detail. Add ?scale=4 for 4×.
curl -X POST "https://everyimg.studio/api/v1/upscale?scale=2" \
-H "Authorization: Bearer eik_live_YOUR_KEY" \
-H "Content-Type: image/png" \
--data-binary @small.png \
-o large.png POST /api/v1/restore — Restore
Repairs scratches, fading and blurry faces in old photos.
curl -X POST https://everyimg.studio/api/v1/restore \
-H "Authorization: Bearer eik_live_YOUR_KEY" \
-H "Content-Type: image/jpeg" \
--data-binary @old-photo.jpg \
-o restored.jpg Authentication
Pass your key on every request: Authorization: Bearer eik_live_…. Keys bought
in Stripe test mode start with eik_test_. We store only a SHA-256 hash of your
key — if you lose it, it cannot be recovered, only replaced by buying a new pack.
Limits
- Input:
image/jpeg,image/pngorimage/webp, up to 4 MB per request (raw binary body). - Rate limit: 60 requests per minute per key (429 +
Retry-Afterbeyond that). - Every 200 response includes
x-calls-remainingwith your current balance. - Failed processing (502) is never charged — the call is refunded automatically.
Errors
Errors are JSON: { "error": { "code": "…", "message": "…" } }
| Status | Code | Meaning |
|---|---|---|
| 401 | invalid_api_key | The Authorization header is missing or the key is unknown. |
| 402 | insufficient_calls | Your call balance is empty — buy another pack below. |
| 400 | unsupported_media_type | Send raw bytes as image/jpeg, image/png or image/webp. |
| 413 | payload_too_large | Images are limited to 4 MB per request. |
| 429 | rate_limited | More than 60 requests in one minute — check the Retry-After header. |
| 502 | provider_error | Processing failed on our side. You were not charged for the call. |
| 503 | unavailable | The endpoint is temporarily unavailable. |
Pricing
Pay as you go — one call is one processed image, on any endpoint. Calls never expire. Prices include VAT where applicable; you get a Stripe invoice automatically.
Topping up an existing key? Paste it here before you buy and the calls are added to it instead of issuing a new key. It is hashed in your browser’s request and never stored.
Could not start the checkout — please try again in a minute.