curl --request POST \
--url https://polza.ai/api/v1/media \
--header 'Authorization: Bearer <POLZA_AI_API_KEY>' \
--header 'Content-Type: application/json' \
--data '{
"model": "google/gemini-3.1-flash-image-preview",
"input": {
"prompt": "Фотореалистичный портрет бизнесмена в современном офисе",
"aspect_ratio": "1:1",
"image_resolution": "2K",
"output_format": "png"
}
}'import requests
response = requests.post(
'https://polza.ai/api/v1/media',
headers={'Authorization': 'Bearer <POLZA_AI_API_KEY>'},
json={
'model': 'google/gemini-3.1-flash-image-preview',
'input': {
'prompt': 'Фотореалистичный портрет бизнесмена в современном офисе',
'aspect_ratio': '1:1',
'image_resolution': '2K',
'output_format': 'png'
}
}
)
print(response.json())const response = await fetch('https://polza.ai/api/v1/media', {
method: 'POST',
headers: {
'Authorization': 'Bearer <POLZA_AI_API_KEY>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'google/gemini-3.1-flash-image-preview',
input: {
prompt: 'Фотореалистичный портрет бизнесмена в современном офисе',
aspect_ratio: '1:1',
image_resolution: '2K',
output_format: 'png'
}
})
});
const result = await response.json();<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://polza.ai/api/v1/media/nanobanano-2",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'google/gemini-3.1-flash-image-preview',
'input' => [
'prompt' => 'Фотореалистичный портрет бизнесмена в современном офисе, профессиональное студийное освещение',
'aspect_ratio' => '1:1',
'image_resolution' => '2K',
'output_format' => 'png',
'images' => [
[
'type' => 'url',
'data' => 'https://example.com/image.png'
]
]
],
'provider' => [
'allow_fallbacks' => true,
'order' => [
'OpenAI',
'Anthropic'
],
'only' => [
'OpenAI',
'Google'
],
'ignore' => [
'DeepInfra'
],
'sort' => 'price',
'max_price' => [
'prompt' => 10,
'completion' => 20,
'image' => 5,
'audio' => 15,
'request' => 1
]
],
'async' => false,
'user' => 'user-123'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://polza.ai/api/v1/media/nanobanano-2"
payload := strings.NewReader("{\n \"model\": \"google/gemini-3.1-flash-image-preview\",\n \"input\": {\n \"prompt\": \"Фотореалистичный портрет бизнесмена в современном офисе, профессиональное студийное освещение\",\n \"aspect_ratio\": \"1:1\",\n \"image_resolution\": \"2K\",\n \"output_format\": \"png\",\n \"images\": [\n {\n \"type\": \"url\",\n \"data\": \"https://example.com/image.png\"\n }\n ]\n },\n \"provider\": {\n \"allow_fallbacks\": true,\n \"order\": [\n \"OpenAI\",\n \"Anthropic\"\n ],\n \"only\": [\n \"OpenAI\",\n \"Google\"\n ],\n \"ignore\": [\n \"DeepInfra\"\n ],\n \"sort\": \"price\",\n \"max_price\": {\n \"prompt\": 10,\n \"completion\": 20,\n \"image\": 5,\n \"audio\": 15,\n \"request\": 1\n }\n },\n \"async\": false,\n \"user\": \"user-123\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://polza.ai/api/v1/media/nanobanano-2")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"google/gemini-3.1-flash-image-preview\",\n \"input\": {\n \"prompt\": \"Фотореалистичный портрет бизнесмена в современном офисе, профессиональное студийное освещение\",\n \"aspect_ratio\": \"1:1\",\n \"image_resolution\": \"2K\",\n \"output_format\": \"png\",\n \"images\": [\n {\n \"type\": \"url\",\n \"data\": \"https://example.com/image.png\"\n }\n ]\n },\n \"provider\": {\n \"allow_fallbacks\": true,\n \"order\": [\n \"OpenAI\",\n \"Anthropic\"\n ],\n \"only\": [\n \"OpenAI\",\n \"Google\"\n ],\n \"ignore\": [\n \"DeepInfra\"\n ],\n \"sort\": \"price\",\n \"max_price\": {\n \"prompt\": 10,\n \"completion\": 20,\n \"image\": 5,\n \"audio\": 15,\n \"request\": 1\n }\n },\n \"async\": false,\n \"user\": \"user-123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://polza.ai/api/v1/media/nanobanano-2")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"google/gemini-3.1-flash-image-preview\",\n \"input\": {\n \"prompt\": \"Фотореалистичный портрет бизнесмена в современном офисе, профессиональное студийное освещение\",\n \"aspect_ratio\": \"1:1\",\n \"image_resolution\": \"2K\",\n \"output_format\": \"png\",\n \"images\": [\n {\n \"type\": \"url\",\n \"data\": \"https://example.com/image.png\"\n }\n ]\n },\n \"provider\": {\n \"allow_fallbacks\": true,\n \"order\": [\n \"OpenAI\",\n \"Anthropic\"\n ],\n \"only\": [\n \"OpenAI\",\n \"Google\"\n ],\n \"ignore\": [\n \"DeepInfra\"\n ],\n \"sort\": \"price\",\n \"max_price\": {\n \"prompt\": 10,\n \"completion\": 20,\n \"image\": 5,\n \"audio\": 15,\n \"request\": 1\n }\n },\n \"async\": false,\n \"user\": \"user-123\"\n}"
response = http.request(request)
puts response.read_body{
"id": "gen_581761234567890123",
"object": "media.generation",
"status": "pending",
"created": 1703001234,
"model": "google/gemini-2.5-flash-image",
"completed_at": 1703001244,
"data": "<unknown>",
"usage": {
"input_units": 1,
"output_units": 1,
"duration_seconds": 5,
"input_tokens": 10,
"output_tokens": 0,
"total_tokens": 10,
"cost_rub": 1.5,
"cost": 1.5
},
"error": {
"code": "BAD_GATEWAY",
"message": "Ошибка генерации медиа контента"
},
"content": "Банан и яблоко — это фрукты.",
"reasoning_summary": "Preparing image generation prompt with camera settings...",
"warnings": [
"Параметр isEnhance не поддерживается OpenRouter и будет проигнорирован"
]
}Nano Banana 2
Генерация изображений до 4K — полный API-гайд
curl --request POST \
--url https://polza.ai/api/v1/media \
--header 'Authorization: Bearer <POLZA_AI_API_KEY>' \
--header 'Content-Type: application/json' \
--data '{
"model": "google/gemini-3.1-flash-image-preview",
"input": {
"prompt": "Фотореалистичный портрет бизнесмена в современном офисе",
"aspect_ratio": "1:1",
"image_resolution": "2K",
"output_format": "png"
}
}'import requests
response = requests.post(
'https://polza.ai/api/v1/media',
headers={'Authorization': 'Bearer <POLZA_AI_API_KEY>'},
json={
'model': 'google/gemini-3.1-flash-image-preview',
'input': {
'prompt': 'Фотореалистичный портрет бизнесмена в современном офисе',
'aspect_ratio': '1:1',
'image_resolution': '2K',
'output_format': 'png'
}
}
)
print(response.json())const response = await fetch('https://polza.ai/api/v1/media', {
method: 'POST',
headers: {
'Authorization': 'Bearer <POLZA_AI_API_KEY>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'google/gemini-3.1-flash-image-preview',
input: {
prompt: 'Фотореалистичный портрет бизнесмена в современном офисе',
aspect_ratio: '1:1',
image_resolution: '2K',
output_format: 'png'
}
})
});
const result = await response.json();<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://polza.ai/api/v1/media/nanobanano-2",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'google/gemini-3.1-flash-image-preview',
'input' => [
'prompt' => 'Фотореалистичный портрет бизнесмена в современном офисе, профессиональное студийное освещение',
'aspect_ratio' => '1:1',
'image_resolution' => '2K',
'output_format' => 'png',
'images' => [
[
'type' => 'url',
'data' => 'https://example.com/image.png'
]
]
],
'provider' => [
'allow_fallbacks' => true,
'order' => [
'OpenAI',
'Anthropic'
],
'only' => [
'OpenAI',
'Google'
],
'ignore' => [
'DeepInfra'
],
'sort' => 'price',
'max_price' => [
'prompt' => 10,
'completion' => 20,
'image' => 5,
'audio' => 15,
'request' => 1
]
],
'async' => false,
'user' => 'user-123'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://polza.ai/api/v1/media/nanobanano-2"
payload := strings.NewReader("{\n \"model\": \"google/gemini-3.1-flash-image-preview\",\n \"input\": {\n \"prompt\": \"Фотореалистичный портрет бизнесмена в современном офисе, профессиональное студийное освещение\",\n \"aspect_ratio\": \"1:1\",\n \"image_resolution\": \"2K\",\n \"output_format\": \"png\",\n \"images\": [\n {\n \"type\": \"url\",\n \"data\": \"https://example.com/image.png\"\n }\n ]\n },\n \"provider\": {\n \"allow_fallbacks\": true,\n \"order\": [\n \"OpenAI\",\n \"Anthropic\"\n ],\n \"only\": [\n \"OpenAI\",\n \"Google\"\n ],\n \"ignore\": [\n \"DeepInfra\"\n ],\n \"sort\": \"price\",\n \"max_price\": {\n \"prompt\": 10,\n \"completion\": 20,\n \"image\": 5,\n \"audio\": 15,\n \"request\": 1\n }\n },\n \"async\": false,\n \"user\": \"user-123\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://polza.ai/api/v1/media/nanobanano-2")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"google/gemini-3.1-flash-image-preview\",\n \"input\": {\n \"prompt\": \"Фотореалистичный портрет бизнесмена в современном офисе, профессиональное студийное освещение\",\n \"aspect_ratio\": \"1:1\",\n \"image_resolution\": \"2K\",\n \"output_format\": \"png\",\n \"images\": [\n {\n \"type\": \"url\",\n \"data\": \"https://example.com/image.png\"\n }\n ]\n },\n \"provider\": {\n \"allow_fallbacks\": true,\n \"order\": [\n \"OpenAI\",\n \"Anthropic\"\n ],\n \"only\": [\n \"OpenAI\",\n \"Google\"\n ],\n \"ignore\": [\n \"DeepInfra\"\n ],\n \"sort\": \"price\",\n \"max_price\": {\n \"prompt\": 10,\n \"completion\": 20,\n \"image\": 5,\n \"audio\": 15,\n \"request\": 1\n }\n },\n \"async\": false,\n \"user\": \"user-123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://polza.ai/api/v1/media/nanobanano-2")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"google/gemini-3.1-flash-image-preview\",\n \"input\": {\n \"prompt\": \"Фотореалистичный портрет бизнесмена в современном офисе, профессиональное студийное освещение\",\n \"aspect_ratio\": \"1:1\",\n \"image_resolution\": \"2K\",\n \"output_format\": \"png\",\n \"images\": [\n {\n \"type\": \"url\",\n \"data\": \"https://example.com/image.png\"\n }\n ]\n },\n \"provider\": {\n \"allow_fallbacks\": true,\n \"order\": [\n \"OpenAI\",\n \"Anthropic\"\n ],\n \"only\": [\n \"OpenAI\",\n \"Google\"\n ],\n \"ignore\": [\n \"DeepInfra\"\n ],\n \"sort\": \"price\",\n \"max_price\": {\n \"prompt\": 10,\n \"completion\": 20,\n \"image\": 5,\n \"audio\": 15,\n \"request\": 1\n }\n },\n \"async\": false,\n \"user\": \"user-123\"\n}"
response = http.request(request)
puts response.read_body{
"id": "gen_581761234567890123",
"object": "media.generation",
"status": "pending",
"created": 1703001234,
"model": "google/gemini-2.5-flash-image",
"completed_at": 1703001244,
"data": "<unknown>",
"usage": {
"input_units": 1,
"output_units": 1,
"duration_seconds": 5,
"input_tokens": 10,
"output_tokens": 0,
"total_tokens": 10,
"cost_rub": 1.5,
"cost": 1.5
},
"error": {
"code": "BAD_GATEWAY",
"message": "Ошибка генерации медиа контента"
},
"content": "Банан и яблоко — это фрукты.",
"reasoning_summary": "Preparing image generation prompt with camera settings...",
"warnings": [
"Параметр isEnhance не поддерживается OpenRouter и будет проигнорирован"
]
}google/gemini-3.1-flash-image-preview) — модель генерации и редактирования изображений с поддержкой до 4K разрешения, точным рендерингом текста и возможностью передавать до 8 референс-изображений.
Характеристики
| Характеристика | Nano Banana | Nano Banana 2 |
|---|---|---|
| ID модели | google/gemini-2.5-flash-image | google/gemini-3.1-flash-image-preview |
| Max prompt | 20 000 символов | 20 000 символов |
| Разрешения | — | 1K, 2K, 4K |
| Aspect ratio | 10 вариантов | 11 вариантов |
| Референс-изображения | до 8 | до 8 |
Примеры
Редактирование с референс-изображением
const response = await fetch('https://polza.ai/api/v1/media', {
method: 'POST',
headers: {
'Authorization': 'Bearer <POLZA_AI_API_KEY>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'google/gemini-3.1-flash-image-preview',
input: {
prompt: "Добавь текст 'SALE 50%' крупными буквами в центре",
image_resolution: '4K',
images: [
{ type: 'url', data: 'https://example.com/banner.jpg' }
]
}
})
});
import requests
response = requests.post(
'https://polza.ai/api/v1/media',
headers={'Authorization': 'Bearer <POLZA_AI_API_KEY>'},
json={
'model': 'google/gemini-3.1-flash-image-preview',
'input': {
'prompt': "Добавь текст 'SALE 50%' крупными буквами в центре",
'image_resolution': '4K',
'images': [
{'type': 'url', 'data': 'https://example.com/banner.jpg'}
]
}
}
)
curl -X POST "https://polza.ai/api/v1/media" \
-H "Authorization: Bearer <POLZA_AI_API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"model": "google/gemini-3.1-flash-image-preview",
"input": {
"prompt": "Добавь текст SALE 50% крупными буквами в центре",
"image_resolution": "4K",
"images": [
{ "type": "url", "data": "https://example.com/banner.jpg" }
]
}
}'
Ответ
API возвращает объект с ID задачи:{
"id": "aig_abc123",
"object": "media.generation",
"status": "pending",
"created": 1703001244,
"model": "google/gemini-3.1-flash-image-preview"
}
GET /v1/media/{id}:
curl "https://polza.ai/api/v1/media/aig_abc123" \
-H "Authorization: Bearer <POLZA_AI_API_KEY>"
Статусы
| Статус | Описание |
|---|---|
pending | В очереди |
processing | Генерация выполняется |
completed | Готово, URL результата в поле output.url |
failed | Ошибка, описание в поле error |
PERMANENT.Советы
4K для печати
4K для печати
image_resolution: "4K" — это максимальное качество модели.Точный рендеринг текста
Точный рендеринг текста
Детализируйте освещение
Детализируйте освещение
Смотрите также
Попробовать в Playground
Статус и результат генерации
Nano Banana
Nano Banana Pro
Авторизации
API ключ передаётся в заголовке: Authorization: Bearer <POLZA_AI_API_KEY>
Тело
ID модели
google/gemini-3.1-flash-image-preview "google/gemini-3.1-flash-image-preview"
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Асинхронный режим генерации. При true возвращается taskId для опроса статуса
false
Уникальный идентификатор конечного пользователя
"user-123"
Ответ
Уникальный идентификатор генерации
"gen_581761234567890123"
Тип объекта
"media.generation"
Статус генерации
pending, processing, completed, failed, cancelled "pending"
Временная метка создания (Unix timestamp)
1703001234
ID модели, которая генерирует контент
"google/gemini-2.5-flash-image"
Временная метка завершения (Unix timestamp)
1703001244
Данные сгенерированного контента
Информация об использовании ресурсов
Show child attributes
Show child attributes
Информация об ошибке (если failed)
Show child attributes
Show child attributes
Текстовый ответ модели (если вернула текст вместо/вместе с изображением)
"Банан и яблоко — это фрукты."
Краткое резюме рассуждений модели
"Preparing image generation prompt with camera settings..."
Предупреждения (неподдерживаемые параметры и т.д.)
[
"Параметр isEnhance не поддерживается OpenRouter и будет проигнорирован"
]
Была ли эта страница полезной?