Image editing API: edit photos with a prompt, priced per image
Masks, layers and an hour in an editor used to be the price of a new background. Now you send the picture and one sentence, "put the bottle on a marble counter", and get the edit back. Here are the models that edit pictures through one API, what each edit costs, which one fits which job, and the code.
Image editing API pricing (November 2026)
An edit is priced like any other picture from the same model: per image, and the reference pictures cost nothing extra. The lowest price for each model, and what 1,000 edits cost at that size:
| 모델 | 개발사 | 참조 이미지 | Per edit, from | 1,000 edits | 적합한 용도 |
|---|---|---|---|---|---|
| Nano Banana Pro | 최대 14장 | $0.04 | $40.00 | Products, labels, words, multi-picture scenes | |
| Nano Banana 2 | 최대 14장 | $0.03 | $30.00 | Everyday edits for less | |
| GPT Image 2 | OpenAI | 최대 16장 | $0.03 | $30.00 | Detailed instructions, many references |
| Seedream 5.5 | ByteDance | 최대 10장 | $0.02 | $20.00 | The lowest price per edit |
| FLUX.2 Pro | Black Forest Labs | 최대 8장 | $0.03 | $30.00 | Photoreal product shots |
| FLUX Kontext Pro | Black Forest Labs | 최대 4장 | $0.04 | $40.00 | Local changes that keep the rest |
| FLUX Kontext Max | Black Forest Labs | 최대 4장 | $0.07 | $70.00 | Kontext's highest quality |
| Qwen Image Edit | Alibaba | 1 | $0.04 | $40.00 | One picture, one instruction |
| MiniMax H3 Image | MiniMax | 최대 4장 | $0.02 | $20.00 | Volume edits, 4K for less |
| Ideogram V4 | Ideogram | 1 | $0.04 | $40.00 | Edits with words in the picture |
Seedream 5.5 and MiniMax H3 Image are the cheapest editors. Nano Banana Pro and GPT Image 2 are the usual picks when a product, a label or a face has to stay exactly as it is. Larger sizes cost more on some models; each model page lists every size.
How an edit request works
- The picture goes in
image_url. One public https link; for several pictures, sendimage_urls, a list. With a picture attached, the model edits it instead of drawing from scratch. - The prompt says what to change, and what to keep. There is no mask to draw. Write "replace the background with a marble counter, keep the bottle and its label exactly as they are".
- Files on your computer go up first.
POST /v1/uploadsgives you a link for a local file, good for 14 days, for pictures up to 30 MB. It is free. - Charged once, on delivery. The price is held when you submit and released if the edit fails, and
max_cost_usdcaps every job.
Edit a product photo
This request moves a product photo onto a new background with Nano Banana Pro at 1K, for $0.04. Send POST /v1/generations, then poll until it has succeeded or failed.
export REVANA_API_KEY="sr_live_..."
# One Idempotency-Key per job, made once: resend with the same $KEY after a timeout, a 429 or a 5xx
KEY=$(uuidgen)
# 1. Submit the job (returns 202 with the generation id). max_cost_usd is your cap: the most it may cost.
curl https://api.revana.si/v1/generations \
-H "Authorization: Bearer $REVANA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $KEY" \
-d '{
"model": "nano-banana-pro",
"input": {
"prompt": "Put the bottle on a white marble counter in soft morning window light. Keep the bottle, its label and its cap exactly as they are.",
"image_url": "https://example.com/bottle.jpg",
"resolution": "1K"
},
"max_cost_usd": 0.1
}'
# 2. Poll with the id from step 1 until status is "succeeded" or "failed".
# A failed job is free; make a new KEY before you submit it again.
curl https://api.revana.si/v1/generations/gen_01JC4R3H6N \
-H "Authorization: Bearer $REVANA_API_KEY"import os
import time
import uuid
import requests
API = "https://api.revana.si/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['REVANA_API_KEY']}"}
# One Idempotency-Key per job, made once. Resend after a timeout, a 429 or a 5xx with the
# same KEY: you get the same job back, never a second charge.
KEY = str(uuid.uuid4())
resp = requests.post(f"{API}/generations", headers={**HEADERS, "Idempotency-Key": KEY}, json={
"model": "nano-banana-pro",
"input": {
"prompt": "Put the bottle on a white marble counter in soft morning window light. Keep the bottle, its label and its cap exactly as they are.",
"image_url": "https://example.com/bottle.jpg",
"resolution": "1K",
},
"max_cost_usd": 0.1, # your cap: the most this job may cost
})
resp.raise_for_status()
job = resp.json()
while job["status"] in ("queued", "running"):
time.sleep(3)
job = requests.get(f"{API}/generations/{job['id']}", headers=HEADERS).json()
if job["status"] == "succeeded":
print(job["output"]["urls"], job["cost_usd"])
else:
# A failed job is free. To try again, make a new KEY: this one answers with the failure.
print("Failed:", job["error"]){
"id": "gen_01JC4R3H6N",
"model": "nano-banana-pro",
"status": "succeeded",
"output": {
"urls": [
"https://cdn.revana.si/g/gen_01JC4R3H6N/0.png"
]
},
"cost_usd": 0.04,
"attempts": 1,
"error": null,
"created_at": "2026-11-13T10:14:02Z",
"completed_at": "2026-11-13T10:14:31Z"
}Combine several pictures
Send image_urls and refer to the pictures by their order. GPT Image 2 takes up to 16, Nano Banana Pro and Nano Banana 2 up to 14, Seedream 5.5 up to 10. This one puts a watch from a product shot on a model's wrist, for $0.03:
{
"model": "gpt-image-2",
"input": {
"prompt": "Put the watch from the first picture on the left wrist of the person in the second picture. Keep the watch face, strap and logo exactly as they are. Natural daylight.",
"image_urls": [
"https://example.com/watch.jpg",
"https://example.com/model.jpg"
],
"resolution": "1K",
"aspect_ratio": "3:4"
},
"max_cost_usd": 0.1
}Send a picture from your computer
Ask for an upload link, PUT the file there, and pass the link you get back as image_url. The full reference is in the docs.
import os
import requests
API = "https://api.revana.si/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['REVANA_API_KEY']}"}
def upload(path, content_type="image/jpeg"):
"""Upload a local picture and return a link to use as image_url (good for 14 days)."""
with open(path, "rb") as f:
data = f.read()
resp = requests.post(f"{API}/uploads", headers=HEADERS, json={
"content_type": content_type,
"bytes": len(data),
"filename": os.path.basename(path),
})
resp.raise_for_status()
up = resp.json()
# PUT the bytes within an hour, with exactly the headers it gives you
requests.put(up["upload_url"], data=data, headers=up["upload_headers"]).raise_for_status()
return up["url"]
image_url = upload("bottle.jpg")Which editing model to use
- Keep a product, a label or a face exactly: Nano Banana Pro (Nano Banana Pro API) or GPT Image 2 (GPT Image 2 API).
- Change one thing and leave the rest: FLUX Kontext Pro (FLUX API) or Qwen Image Edit (Qwen Image API, or try it on the Qwen Image Edit try page).
- Many references in one scene: GPT Image 2 or Nano Banana Pro.
- The lowest price per edit: Seedream 5.5 or MiniMax H3 Image, from $0.02.
- Words in the picture: Ideogram V4 (Ideogram API pricing) or Nano Banana Pro.
Upscale the result
Edits come back at the size you asked for. To make one larger and sharper, send it to Recraft Crisp Upscale for $0.01: the picture in image_url, no prompt (see the Recraft API guide).
{
"model": "recraft-crisp-upscale",
"input": {
"image_url": "https://example.com/bottle-edited.png"
},
"max_cost_usd": 0.05
}A size, aspect ratio or number of pictures a model does not take comes back straight away as 422 invalid_input, with the values it does take, and nothing is charged.
Compare every image model's lowest price in the cheapest image API guide and the Midjourney alternatives list. Every model is on the models page; top up on the pricing page, read the request reference in the docs, or get an API key.
자주 묻는 질문
What is the best image editing API?
It depends on the edit. Nano Banana Pro and GPT Image 2 keep products, labels and faces most faithfully, FLUX Kontext and Qwen Image Edit change one thing and leave the rest, and Seedream 5.5 has the lowest price. All of them run on one API key with the same request.
How much does an AI image edit cost?
In November 2026, Seedream 5.5 edits from $0.02 a picture, GPT Image 2 from $0.03, Nano Banana Pro from $0.04 and FLUX Kontext Pro at $0.04. Reference pictures cost nothing extra, and a failed edit costs nothing.
Do I need a mask to edit an image?
No. Describe the change in the prompt and say what must stay the same, for example "replace the background, keep the bottle and its label exactly as they are". The model works out which part to change.
Can I edit with several reference pictures?
Yes. Send image_urls, a list, and refer to the pictures by their order. GPT Image 2 takes up to 16, Nano Banana Pro and Nano Banana 2 up to 14, Seedream 5.5 up to 10, FLUX.2 Pro up to 8, and FLUX Kontext and MiniMax H3 Image up to 4.
How do I edit a picture that is on my computer?
Upload it first with POST /v1/uploads. You get an upload link to PUT the file to and a link, good for 14 days, to pass as image_url. Uploading is free.
Am I charged for a failed edit?
No. The price is held when you submit and released if the job fails, so a failed edit costs nothing.
Edit images with one key
One API key for Nano Banana, GPT Image 2, FLUX Kontext, Qwen Image Edit, Seedream and every other image model. Prepaid credit from $10, charged only for images that are delivered.