要点
请求被接收时,这张图片的价格会从余额中扣除。如果最后没有生成出图片,这笔扣费会自动退回余额,不需要你申请,无论原因在请求本身还是在服务一侧。请求没有被接收时,不会扣费。API 响应、控制台的交易记录和数据分析页面都能核对退款。
扣费和退款 分别发生在 什么时候?
金额在接收请求时、开始处理之前扣除,并出现在 202 响应的 cost 字段里。以 Nano Banana 2.1 的 2K 为例,每张 $0.03。价格核对日期:。其他模型和分辨率的价格见价格页。202 表示“请求已接收”,而不是“图片已就绪”。
如果没有生成出图片,扣费会自动退回:失败的请求不扣费,金额会立即退回余额。
文中的 3 张图片都是成功生成的结果。没有生成出图片的请求无画面可展示,所以这里没有失败示例和控制台截图。
这张图片的提示词
浅色圆形石台上立着一个琥珀色玻璃瓶,配光滑黑色瓶盖。采用正面产品摄影构图,瓶子居中且完整,周围留出空白。背景为哑光米色,左侧柔光在玻璃上形成一条细亮边。不出现文字、标志、人物或水印。
Nano Banana 2.1
nano-banana-2.1 · 2K · 1:1 · $0.03
Nano Banana 2.1,2K,1:1,一次尝试。浅色圆形石台上立着一个琥珀色玻璃瓶,瓶盖是光滑的黑色,背景为哑光米色。瓶子在水平方向居中,垂直方向在画面中央附近,整体完整可见;连同石台一起看,主体落在画面中下部,瓶子上方留有大片空白。整体是正面构图,镜头略高于平视,能看到石台的台面。瓶身偏左有一条竖向的反光,与提示词要求的左侧柔光一致,但玻璃整体偏深,高光不强,阴影很淡。瓶子短颈、宽口,形状更像广口罐,而不是细颈瓶。画面中没有文字、标志、人物或水印。
哪些请求 根本不会扣费?
- 请求没有被接收。 响应在扣费之前就返回,余额不变。例如:提示词为空,或所选分辨率、宽高比不被模型支持时的
400 ERR_INVALID_REQUEST;参考图下载或校验失败时的422 ERR_INPUT_FETCH_FAILED;details.reason为overloaded的503。 - 请求已被接收,但没有生成出图片。 扣费已经发生,任务的状态变为
failed,金额自动退回。 - 服务一侧出错。 出现
500 ERR_GENERATION_FAILED时,已扣的金额会自动退回;ERR_INTERNAL在请求什么也没创建时同样如此;503的details.reason为provider_unavailable时,如果已经扣费,金额也会自动退回。
在 failed 之后想再生成一次,要发送一次新的请求,并使用新的幂等键:原来的幂等键不会让任务重新开始。新的请求有自己的扣费,之前那笔扣费已经自动退回;如果新的请求也失败了,同样会自动退回。幂等键的用法见重试不重复扣费。
API 响应里能看到什么?
被接收的请求和任务的结果是两个不同的响应。先返回的是 202,字段为 id、status、task_id 和 cost;结果用 GET /creations/{id} 或 Webhook 取得。
{
"id": "5b0214ae-9e39-460a-820a-f6ae3e24400b",
"status": "queued",
"task_id": "5b0214ae-9e39-460a-820a-f6ae3e24400b",
"cost": 0.03
}
{
"id": "5b0214ae-9e39-460a-820a-f6ae3e24400b",
"status": "failed",
"error": "The image or prompt was rejected by the safety filter. Try a different image or rephrase the prompt.",
"failure": {
"type": "declined",
"code": "content_policy",
"retryable": false
}
}
没有生成出图片时,GET /creations/{id} 返回 200,状态为 failed:这是任务的结果,不是状态查询本身的错误。error 是用于展示的英文文本,业务逻辑请依据 failure 对象。failure.type 为 declined 表示原因在请求本身,同样的请求会得到同样的结果,需要先调整;为 error 表示原因在服务一侧,只要 retryable 不等于 false,就可以再发送一次请求,使用新的幂等键。两种类型下,金额都会退回。同样的 failure 对象也会出现在 creation.failed 这个 Webhook 事件里。
读取任务并识别 failed 的代码:
CREATION_ID="5b0214ae-9e39-460a-820a-f6ae3e24400b" 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 requests API = "https://api.rendergrid.io/ api/ public/ v1" KEY = os.environ["RENDERGRID_API_KEY"] creation_id = "5b0214ae-9e39-460a-820a-f6ae3e24400b" response = requests.get( f"{API}/creations/{creation_id}", headers={"Authorization": f"Bearer {KEY}"}, timeout=(5, 20), ) response.raise_for_status() creation = response.json() if creation["status"] == "failed": # failure 对象只在 failed 时出现,解析时视为可选 failure = creation.get("failure") or {} print(failure.get("type"), failure.get("code"), failure.get("retryable"))
// Node.js 22+,文件扩展名为 .mjs const API = "https://api.rendergrid.io/ api/ public/ v1"; const id = "5b0214ae-9e39-460a-820a-f6ae3e24400b"; const key = process.env.RENDERGRID_API_KEY; const response = await fetch(`${API}/creations/${id}`, { headers: { Authorization: `Bearer ${key}` }, signal: AbortSignal.timeout(20_000), }); if (!response.ok) { const body = await response.text(); throw new Error(`HTTP ${response.status}: ${body}`); } const creation = await response.json(); if (creation.status === "failed") { const { type, code, retryable } = creation.failure ?? {}; console.log(type, code, retryable); }
这张图片的提示词
两个陶瓷按压瓶分别为白色和沙色,放在相邻的低矮方台上,泵头朝向一致。三分之四视角,浅色无缝背景,两个瓶子各有柔和阴影。完整展示产品,瓶子之间留一小段间距。不出现文字、标志、人物或水印。
Nano Banana 2.1
nano-banana-2.1 · 2K · 1:1 · $0.03
Nano Banana 2.1,2K,1:1,一次尝试。左边是白色的哑光按压瓶,右边是沙色的按压瓶,瓶身有细小的深色斑点;两个瓶子都带黑色的哑光泵头,泵嘴都朝向左侧,各自立在一块低矮的灰色方台上,两块方台之间只隔一道窄缝,背景是不见接缝的浅灰色。两个瓶子都完整可见,瓶子之间的间距比方台之间的缝宽得多。提示词要求三分之四视角,但画面基本是正对镜头,瓶子和方台的侧面没有明显露出,这是与提示词的出入。提示词还要求两个瓶子各有柔和的阴影,画面里能清楚看到的只有右边方台右侧的一道投影,两个瓶子各自的阴影看不清。这道投影靠近方台的一侧边缘较清晰,比提示词要求的柔和阴影更硬;投影落在右侧,光线大致来自左侧。两个瓶子并排,水平方向居中,上方的留白比下方多。画面中没有文字、标志、人物或水印。
控制台里 能看到什么?
退款可以在控制台的两处核对。一处是余额与充值页面里的交易记录:每笔扣费占一行;请求没有生成出图片时,这一行会标为已退回,另有一行退款记录写明退回的金额,并说明是为失败的请求退款。另一处是数据分析页面:其中有一条说明,指出失败的请求不扣费,并给出所选时段内退回余额的总额。
这张图片的提示词
俯拍一把木刷、一块椭圆香皂和一条叠整齐的白毛巾,底面为米色。物件互不重叠,间隔均匀,画面外缘留白。用漫射日光呈现刷毛和毛巾线圈的细节,阴影轻而自然。不出现文字、标志、人物或水印。
Nano Banana 2.1
nano-banana-2.1 · 2K · 1:1 · $0.03
Nano Banana 2.1,2K,1:1,一次尝试。从高处向下拍摄的平铺构图:左边是木柄刷,刷毛朝上,中间是椭圆形的奶白色香皂,右边是叠好的白色毛巾,三件物品放在带织纹的米色布面上。物品之间互不接触,相邻物品的间隔大致相等,画面四周都留有空白;整排物品在画面中央附近,左边的留白比右边宽。光线柔和,阴影很轻,刷毛的纤维和毛巾的毛圈都清楚可见。画面中没有文字、标志、人物或水印。
自动退款 有哪些局限?
- 错误响应不能确认退款。 退回的金额要到余额和控制台的交易记录里核对。
500不说明请求是否已被接收。 此时不要创建新任务:用同一个幂等键重试同一个请求,以免重复付费。- 新的请求有自己的扣费。 重新生成是一次新的请求,要用新的幂等键;它失败时同样自动退回。
- 其他请求也会改变余额。 核对某一笔退款,请看交易记录,不要只看余额。
常见问题解答
失败的请求要付费吗?
失败后,金额什么时候退回?
怎样确认退款已经退回?
因内容规则被拒绝的请求会退款吗?
来源
- Rendergrid 文档:生成图片价格、扣费和
cost字段。 - Rendergrid 文档:任务与状态
failed状态及其响应。 - Rendergrid 文档:余额何时扣费,何时退回。
- Rendergrid 文档:错误码各类错误的扣费,
failure对象。 - Rendergrid 文档:重试不重复扣费幂等键与
failed之后的新请求。 - Rendergrid 控制台交易记录和数据分析页面。




