Generation and editing in one model
Built natively into Gemini 2.5 Flash, it both creates images from text and edits existing ones to a state-of-the-art standard.
Generate and edit images with Google's Nano Banana through one unified API. A single REST endpoint, async jobs, and webhooks, with no Google Cloud setup to manage.
Integrate Nano Banana with a single API call — one key, one unified endpoint, and shared billing across every model on Apiframe.
model: "nano-banana"
Built natively into Gemini 2.5 Flash, it both creates images from text and edits existing ones to a state-of-the-art standard.
You make targeted, region-aware changes with plain language and refine across multiple turns, without fussy manual masks.
It blends several reference images into one seamless result, borrowing a subject from one, a texture from another, and a background from a third.
It keeps the same character, product, or style across a sequence of images without time-consuming fine-tuning.
Because it draws on Gemini's broader understanding, it grasps how light, objects, and context relate, and renders readable text more reliably than many models.
As a Flash-tier model it offers low latency and cost-effective generation, with Google's invisible SynthID watermark on outputs.
A few outputs generated through the Nano Banana API on Apiframe.
Change the wall color in this living room photo to sage green, keeping everything else the same.
Blend this product photo, this fabric texture, and this background into one seamless ad image.
Show this same character in four panels, waking up, commuting, working, and relaxing, consistent look.
A photorealistic product mockup of a cereal box reading 'OAT CRUNCH' on a kitchen counter.
Place me in this scenic mountain background, matching the lighting and perspective.
Turn this daytime street photo into a rainy night scene with neon reflections.
Send a single POST /v2/images/generate request with your API key to
generate with Nano Banana. The call returns a jobId you can poll or
receive via webhook.
curl -X POST https://api.apiframe.ai/v2/images/generate \
-H "X-API-Key: afk_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"prompt": "a sleek silver sports car on a coastal highway at sunset, hyper-realistic",
"model": "nano-banana",
"nanoBananaParams": {
"image_input": "https://example.com/input.jpg",
"output_format": "jpg",
"google_search": false,
"image_search": false
}
}'import requests
response = requests.post(
"https://api.apiframe.ai/v2/images/generate",
headers={
"X-API-Key": "afk_your_api_key_here",
"Content-Type": "application/json",
},
json={
"prompt": "a sleek silver sports car on a coastal highway at sunset, hyper-realistic",
"model": "nano-banana",
"nanoBananaParams": {
"image_input": "https://example.com/input.jpg",
"output_format": "jpg",
"google_search": False,
"image_search": False
}
},
)
print(response.json()) # { "jobId": "...", "status": "QUEUED" }const response = await fetch("https://api.apiframe.ai/v2/images/generate", {
method: "POST",
headers: {
"X-API-Key": "afk_your_api_key_here",
"Content-Type": "application/json",
},
body: JSON.stringify({
"prompt": "a sleek silver sports car on a coastal highway at sunset, hyper-realistic",
"model": "nano-banana",
"nanoBananaParams": {
"image_input": "https://example.com/input.jpg",
"output_format": "jpg",
"google_search": false,
"image_search": false
}
}),
});
const { jobId } = await response.json();
console.log(jobId);Generation is asynchronous. A successful submission returns 202 Accepted with a jobId. Poll GET /v2/jobs/{id} (or supply a webhook_url) until the status is COMPLETED; the result field then holds the output URL(s).
{
"jobId": "b2c3d4e5-f6a7-8901-bcde-f23456789012",
"status": "QUEUED"
}curl https://api.apiframe.ai/v2/jobs/JOB_ID \
-H "X-API-Key: afk_your_api_key_here"import requests, time
while True:
job = requests.get(
"https://api.apiframe.ai/v2/jobs/JOB_ID",
headers={"X-API-Key": "afk_your_api_key_here"},
).json()
if job["status"] in ("COMPLETED", "FAILED"):
break
time.sleep(2)
print(job["result"])let job;
do {
await new Promise((r) => setTimeout(r, 2000));
job = await fetch("https://api.apiframe.ai/v2/jobs/JOB_ID", {
headers: { "X-API-Key": "afk_your_api_key_here" },
}).then((r) => r.json());
} while (job.status !== "COMPLETED" && job.status !== "FAILED");
console.log(job.result);Request parameters accepted by the Nano Banana endpoint. Model-specific options are nested under the params object shown below.
| Parameter | Type | Required | Default | Allowed / range | Description |
|---|---|---|---|---|---|
| prompt | string | required | — | — | Text description of what to generate. |
| model | string | required | "nano-banana" | "nano-banana" | The model identifier for this endpoint. |
| nanoBananaParams.image_input | string (URL) | optional | — | — | Compose with or edit a reference image. |
| nanoBananaParams.output_format | string | optional | "jpg" | "jpg", "png", "webp" | Output format |
| nanoBananaParams.google_search | boolean | optional | false | — | Google search grounding |
| nanoBananaParams.image_search | boolean | optional | false | — | Image search grounding |
Common questions about the Nano Banana API.
The nickname for Google's Gemini 2.5 Flash Image, a state-of-the-art image generation and editing model released in August 2025.
Text-to-image generation, conversational editing, multi-image fusion, character consistency, and multi-turn refinement.
No. It makes region-aware edits from natural-language instructions.
Yes, across multiple generations without fine-tuning.
Yes. Outputs carry Google's invisible SynthID watermark.
Through Apiframe, as well as the Gemini app, Google AI Studio, the Gemini API, and Vertex AI.
Still have questions?
Get your API key and integrate Nano Banana in minutes — Pay-as-you-go.
Questions? Join our Discord or contact sales.