Guide

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:

Image editing API price per edit
ModelMade byReference picturesPer edit, from1,000 editsGood for
Nano Banana ProGoogleup to 14$0.04$40.00Products, labels, words, multi-picture scenes
Nano Banana 2Googleup to 14$0.03$30.00Everyday edits for less
GPT Image 2OpenAIup to 16$0.03$30.00Detailed instructions, many references
Seedream 5.5ByteDanceup to 10$0.02$20.00The lowest price per edit
FLUX.2 ProBlack Forest Labsup to 8$0.03$30.00Photoreal product shots
FLUX Kontext ProBlack Forest Labsup to 4$0.04$40.00Local changes that keep the rest
FLUX Kontext MaxBlack Forest Labsup to 4$0.07$70.00Kontext's highest quality
Qwen Image EditAlibaba1$0.04$40.00One picture, one instruction
MiniMax H3 ImageMiniMaxup to 4$0.02$20.00Volume edits, 4K for less
Ideogram V4Ideogram1$0.04$40.00Edits 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, send image_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/uploads gives 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_usd caps 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.

cURL
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"
Python
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"])
Response
{
  "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:

Request body
{
  "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.

Python
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

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).

Request body
{
  "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.

Frequently asked questions

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.