Nano Banana 2
The main choice for most tasks: draws from a description, edits your photos and writes clean text on pictures.
Good for: people, landscapes, photo edits, pictures with lettering
How to get a better result
"A ginger cat on a windowsill, rain outside, watercolor".
"Soft sunset", "neon light", "cozy, warm tones".
Refine the description and press "Another version" — every result is new.
Pass this model in the request nano-banana-2
1. Create a task POST /api/v1/jobs/createTask
curl -X POST https://mixmedia.tech/api/v1/jobs/createTask \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-123" \
-d '{
"model": "nano-banana-2",
"callBackUrl": "https://your-app.example/callback",
"input": {
"prompt": "A small robot watering flowers on a windowsill, watercolor, morning light",
"image_input": [],
"aspect_ratio": "auto",
"resolution": "1K",
"output_format": "jpg"
}
}'import time, requests
API = "https://mixmedia.tech/api/v1"
HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}
task = requests.post(f"{API}/jobs/createTask", headers=HEADERS, json={
"model": "nano-banana-2",
"callBackUrl": "https://your-app.example/callback",
"input": {
"prompt": "A small robot watering flowers on a windowsill, watercolor, morning light",
"image_input": [],
"aspect_ratio": "auto",
"resolution": "1K",
"output_format": "jpg"
}
}).json()
task_id = task["data"]["taskId"]
while True:
info = requests.get(f"{API}/jobs/recordInfo", headers=HEADERS, params={"taskId": task_id}).json()["data"]
if info["state"] in ("success", "fail"):
break
time.sleep(4)
print(info["state"], info.get("resultJson") or info.get("failMsg"))const API = "https://mixmedia.tech/api/v1";
const headers = { Authorization: "Bearer YOUR_API_KEY", "Content-Type": "application/json" };
const { data } = await fetch(`${API}/jobs/createTask`, {
method: "POST", headers,
body: JSON.stringify({
"model": "nano-banana-2",
"callBackUrl": "https://your-app.example/callback",
"input": {
"prompt": "A small robot watering flowers on a windowsill, watercolor, morning light",
"image_input": [],
"aspect_ratio": "auto",
"resolution": "1K",
"output_format": "jpg"
}
}),
}).then((r) => r.json());
let info;
do {
await new Promise((r) => setTimeout(r, 4000));
info = (await fetch(`${API}/jobs/recordInfo?taskId=${data.taskId}`, { headers }).then((r) => r.json())).data;
} while (!["success", "fail"].includes(info.state));
console.log(info.state, info.resultJson ?? info.failMsg);Response: data.taskId. callBackUrl and Idempotency-Key are optional.
2. Status and result GET /api/v1/jobs/recordInfo
curl "https://mixmedia.tech/api/v1/jobs/recordInfo?taskId=TASK_ID" \
-H "Authorization: Bearer YOUR_API_KEY"
data.state: waiting, queuing, generating, success, fail. On success data.resultJson is a JSON string with resultUrls.
3. Upload a file POST /api/v1/files/upload
curl -X POST https://mixmedia.tech/api/v1/files/upload \
-H "Authorization: Bearer YOUR_API_KEY" -F "file=@photo.jpg"
The response has data.url. Pass that URL in the file field. Any public https URL works too.
Input fields
| Field | What to send |
|---|---|
prompt * | text, up to 20000 characters |
image_input | list of URLs, up to 10 |
aspect_ratio | auto · 1:1 · 2:3 · 3:2 · 3:4 · 4:3 · 4:5 · 5:4 · 9:16 · 16:9 · 21:9 · 1:4 · 4:1 · 1:8 · 8:1 · default auto |
resolution | 0.5K · 1K · 2K · 4K · default 1K |
output_format | jpg · png · default jpg |
About the model
Nano Banana 2 is Google's main image model. It keeps faces and characters recognisable, writes readable text on pictures, understands long detailed descriptions and can use up to 10 of your photos to edit, combine or copy a style.
1K is faster, 2K gives more detail. A picture usually takes 1–2.5 minutes.


