01快速上手
API 文档:快速开始
获取密钥,发送一次请求,下载生成好的图片。整个过程需要五分钟。
这个模型并不支持所有分辨率和宽高比:示例中使用的是它支持的那些。
前提条件
- Rendergrid 账号和 API 密钥——获取方法。
- 以美元计的余额。一张 Nano Banana Pro 的 1K 图片价格为 $0.04,$1 可生成 25 张。所有模型的价格见价格页。
- 任何能发送 HTTPS 请求的语言。示例使用 curl、搭配
requests包的 Python 和 Node.js 22+。
先小额充值:每张图片按其价格扣费,请求失败不收费,金额会立即退回余额。
第 1 步:获取密钥
前往控制台:打开“API 密钥”页面,点击“创建密钥”。密钥形如 rg_live_ 加上 40 个字符。它只显示一次,请立即复制。
将密钥放入服务器的环境变量中,这样它就不会进入代码和代码仓库。
$ export RENDERGRID_API_KEY="rg_live_your_key"
密钥就是你余额的密码。不要把它写进网站或移动应用的代码:只在服务器端向 API 发送请求。
第 2 步:发送请求
生成第一张图片需要三个字段:model、prompt,以及在宽高比重要时使用的 aspect_ratio。请求头 X-Idempotency-Key 可在需要重试请求时防止重复扣费。
# 需要 bash、curl 和 uuidgen。每个请求使用一个幂等键。 IDEMPOTENCY_KEY="$(uuidgen)" || exit 1 curl --fail-with-body --max-time 30 \ -X POST https://api.rendergrid.io/ api/ public/ v1/ images/ generate \ -H "Authorization: Bearer $RENDERGRID_API_KEY" \ -H "Content-Type: application/json" \ -H "X-Idempotency-Key: $IDEMPOTENCY_KEY" \ -d '{ "model": "nano-banana-pro", "prompt": "大理石上的陶瓷杯,柔和的窗光", "resolution": "1K", "aspect_ratio": "4:5" }'
import os import uuid import requests key = os.environ["RENDERGRID_API_KEY"] payload = { "model": "nano-banana-pro", "prompt": "大理石上的陶瓷杯,柔和的窗光", "resolution": "1K", "aspect_ratio": "4:5", } response = requests.post( "https://api.rendergrid.io/ api/ public/ v1/ images/ generate", headers={ "Authorization": f"Bearer {key}", # 每个请求使用新的值;重试时使用同一个值 "X-Idempotency-Key": str(uuid.uuid4()), }, json=payload, timeout=(10, 120), ) response.raise_for_status() creation = response.json() print(creation["id"], creation["status"], creation["cost"])
// Node.js 22+,文件扩展名为 .mjs import { randomUUID } from "node:crypto"; const API = "https://api.rendergrid.io/ api/ public/ v1"; const response = await fetch(`${API}/images/generate`, { method: "POST", headers: { Authorization: `Bearer ${process.env.RENDERGRID_API_KEY}`, "Content-Type": "application/json", // 每个请求使用新的值;重试时使用同一个值 "X-Idempotency-Key": randomUUID(), }, body: JSON.stringify({ model: "nano-banana-pro", prompt: "大理石上的陶瓷杯,柔和的窗光", resolution: "1K", aspect_ratio: "4:5", }), signal: AbortSignal.timeout(120_000), }); if (!response.ok) { const body = await response.text(); throw new Error(`HTTP ${response.status}: ${body}`); } const creation = await response.json(); console.log(creation.id, creation.status, creation.cost);
响应为 202 Accepted,表示“请求已接收”,而不是“图片已就绪”。请保存 id,之后用它获取结果。
{
"id": "5b0214ae-9e39-460a-820a-f6ae3e24400b",
"status": "queued",
"task_id": "5b0214ae-9e39-460a-820a-f6ae3e24400b",
"cost": 0.04
}cost 是我们为这张图片扣除的美元金额,以数字表示,例如 0.04。
第 3 步:等待结果
图片的生成需要几秒到一分钟。查询状态的频率不要高于每 5 秒一次。状态为 queued 或 processing 时请等待;completed 表示图片已就绪;failed 表示生成失败。
CREATION_ID="5b0214ae-9e39-460a-820a-f6ae3e24400b" # 第 2 步中的 id curl --fail-with-body --max-time 20 \ "https://api.rendergrid.io/ api/ public/ v1/ creations/ $CREATION_ID" \ -H "Authorization: Bearer $RENDERGRID_API_KEY"
import os import time import requests API = "https://api.rendergrid.io/ api/ public/ v1" KEY = os.environ["RENDERGRID_API_KEY"] HEADERS = {"Authorization": f"Bearer {KEY}"} creation_id = "5b0214ae-9e39-460a-820a-f6ae3e24400b" # 第 2 步中的 id while True: r = requests.get( f"{API}/creations/{creation_id}", headers=HEADERS, timeout=(5, 20), ) r.raise_for_status() creation = r.json() if creation["status"] in ("completed", "failed"): break time.sleep(5) # 查询频率不能高于每 5 秒一次 if creation["status"] == "completed": print(creation["result_urls"]) else: print(creation["error"], creation["failure"])
// Node.js 22+,文件扩展名为 .mjs const API = "https://api.rendergrid.io/ api/ public/ v1"; const key = process.env.RENDERGRID_API_KEY; const headers = { Authorization: `Bearer ${key}` }; // 第 2 步中的 id const creationId = "5b0214ae-9e39-460a-820a-f6ae3e24400b"; let creation; do { // 查询频率不能高于每 5 秒一次 await new Promise((resolve) => setTimeout(resolve, 5000)); const url = `${API}/creations/${creationId}`; const res = await fetch(url, { headers }); if (!res.ok) { throw new Error(`HTTP ${res.status}: ${await res.text()}`); } creation = await res.json(); } while (["queued", "processing"].includes(creation.status)); console.log(creation.status); console.log(creation.result_urls ?? creation.error);
{
"id": "5b0214ae-9e39-460a-820a-f6ae3e24400b",
"status": "completed",
"result_urls": ["https:// cdn.rendergrid.io/ images/ example/ result.jpg"]
}请求失败不收费:费用立即退回余额。
因此失败后可以直接重试——参见重试不重复扣费。
第 4 步:下载图片
result_urls 中的链接有效期为一天,之后文件会被删除。请在状态变为 completed 后立即把图片保存到你自己的存储中。
$ curl -L -o result.jpg \ "https://cdn.rendergrid.io/ images/ example/ result.jpg"
完成:密钥、请求和第一张图片。接下来可以添加参考图、选择其他模型,或接入 Webhook。