概述
使用 API Key 通过简单的 HTTP 接口编辑或转换现有图片。积分将根据处理的图片数量自动扣减。
接口地址
- 方法:
POST - URL:
https://api.nanobananaapi.dev/v1/images/edit
身份验证
在 Authorization 请求头中包含您的 API Key:
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json请求体
{
"prompt": "将这个风景图转换成冬季雪景",
"image": "https://example.com/image.jpg",
"num": 1,
"model": "gemini-3-pro-image-preview",
"image_size": "16:9"
}参数说明
prompt(必填): 描述期望的转换效果image(必填): 源图片 URL 或 base64 数据 URL。可以是单个字符串或字符串数组num(可选): 生成变体的数量 (默认: 1, 最大: 9)model(可选): 使用的 AI 模型 (默认:gemini-3-pro-image-preview)image_size(可选): 输出图片的宽高比mask(可选): 用于选择性编辑的蒙版图片 URL
批量处理
一次请求可以处理多张图片:
{
"prompt": "让天空更有戏剧性",
"image": [
"https://example.com/image1.jpg",
"https://example.com/image2.jpg"
],
"num": 2,
"model": "gemini-3-pro-image-preview"
}支持的 model 值:
gemini-3-pro-image-previewgemini-3-pro-image-preview-2kgemini-3-pro-image-preview-4k
支持的 image_size 值:
1:116:99:164:33:42:33:2
积分扣减
- gemini-2.5-flash-image: 每张图片
2积分 - gemini-2.5-flash-image-hd: 每张图片
5积分 - gemini-3-pro-image-preview: 每张图片
10积分 - gemini-3-pro-image-preview-2k: 每张图片
10积分 - gemini-3-pro-image-preview-4k: 每张图片
20积分 - 如果积分不足,API 将返回错误。
响应格式
所有响应使用统一的 JSON 格式:
{
"code": 0,
"message": "ok",
"data": {
"url": "https://api.nanobananaapi.dev/v1/images/1234567890.png"
}
}当 num 大于 1 时,API 返回多个图片 URL:
{
"code": 0,
"message": "ok",
"data": {
"url": [
"https://api.nanobananaapi.dev/v1/images/1234567890.png",
"https://api.nanobananaapi.dev/v1/images/0987654321.png"
]
}
}错误响应:
{
"code": 400,
"message": "Parameter \"image\" is required for image editing"
}常见错误信息:
400: 参数错误401: 未授权500: 服务器错误
调用示例
curl
curl -X POST "https://api.nanobananaapi.dev/v1/images/edit" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "将这个风景图转换成冬季雪景",
"image": "https://example.com/image.jpg",
"num": 1,
"model": "gemini-3-pro-image-preview",
"image_size": "16:9"
}'Node.js
async function editImage() {
const res = await fetch('https://api.nanobananaapi.dev/v1/images/edit', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
prompt: '将这个风景图转换成冬季雪景',
image: 'https://example.com/image.jpg',
num: 1,
model: 'gemini-3-pro-image-preview',
image_size: '16:9',
}),
});
const result = await res.json();
if (result.code !== 0) throw new Error(result.message);
return result.data;
}Python
import requests
def edit_image():
url = 'https://api.nanobananaapi.dev/v1/images/edit'
headers = {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
}
payload = {
'prompt': '将这个风景图转换成冬季雪景',
'image': 'https://example.com/image.jpg',
'num': 1,
'model': 'gemini-3-pro-image-preview',
'image_size': '16:9',
}
res = requests.post(url, headers=headers, json=payload, timeout=60)
res.raise_for_status()
result = res.json()
if result.get('code') != 0:
raise Exception(result.get('message'))
return result.get('data')
print(edit_image())Go
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
"time"
)
func main() {
url := "https://api.nanobananaapi.dev/v1/images/edit"
payload := map[string]any{
"prompt": "将这个风景图转换成冬季雪景",
"image": "https://example.com/image.jpg",
"num": 1,
"model": "gemini-3-pro-image-preview",
"image_size": "16:9",
}
bodyBytes, err := json.Marshal(payload)
if err != nil {
panic(err)
}
req, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(bodyBytes))
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{Timeout: 60 * time.Second}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
respBody, err := io.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Println(string(respBody))
}Java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
public class Main {
public static void main(String[] args) throws Exception {
String json = "{\n" +
" \"prompt\": \"将这个风景图转换成冬季雪景\",\n" +
" \"image\": \"https://example.com/image.jpg\",\n" +
" \"num\": 1,\n" +
" \"model\": \"gemini-3-pro-image-preview\",\n" +
" \"image_size\": \"16:9\"\n" +
"}";
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10))
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.nanobananaapi.dev/v1/images/edit"))
.timeout(Duration.ofSeconds(60))
.header("Authorization", "Bearer YOUR_API_KEY")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(json))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}