API 实战配方
商品图生成
每个预期输出使用一个稳定的 requestId。将返回的 imageUrl 和商品记录一起保存;网络超时时重试同一个 request id,不要创建新的生成任务。
const request = {
prompt: "干净的电商商品摄影图:哑光黑色水壶放在石材台座上,柔和棚拍光线,为标题留出空白",
model: "nano-banana-fast",
ratio: "1:1",
style: "studio",
requestId: `catalog-${productId}-hero-v1`,
};
const response = await fetch("https://nanobananafree.app/api/nano-banana/generate", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${process.env.NANO_BANANA_API_KEY}`,
},
body: JSON.stringify(request),
});
if (!response.ok) throw new Error(await response.text());
const result = await response.json();
await saveProductHero(productId, result.imageUrl, result.requestId);重试规则
409表示同一请求仍在处理或已经失败,应先查看历史记录。402表示 credits reservation 失败,不要无限重试。- 最多四个变体可以使用同步 batch API。部分项目失败时返回 HTTP
207,每个项目都有独立的 request id、扣费和退款记录。异步任务完成回调可以在登录后的 Webhooks 控制台创建,或调用POST /api/webhooks。
const batch = await fetch("https://nanobananafree.app/api/nano-banana/batch", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${process.env.NANO_BANANA_API_KEY}`,
},
body: JSON.stringify({
prompt: "干净摄影棚中的高级香蕉产品海报",
model: "nano-banana-fast",
count: 3,
batchRequestId: "product-poster-v1",
}),
});
const payload = await batch.json();
const successfulImages = payload.results.filter(
(item) => item.status === "succeeded"
);可复用生产设置
如果同一套提示词和设置会重复使用,可以在登录后的工作室保存一个命名工作流。 它只保存生成上下文,不会把图片字节写入 workflow 记录。若需要长期保留生成图片, 仍应在自己的资产系统中保存结果 URL 或文件。