Recraft 的 API 用「API 单位」计价,整张价目表就一页:USD $1.00 换 1,000 单位,每个操作扣掉官方公布的单位数。这一页里有两套计费基准——按张和按次,其中一套很容易算错。
官方定价页公布了什么
页面写清了换算率、单位包规则,以及一张每行都同时给出美元数和单位数的服务价目表。单位包「必须预付,且不可取消、不可退款」,购买数量不限,并且「不会过期」。
整个定价模型就这些。这一页没有预留档位,没有承诺消费表,也没有公布量级折扣,所以算术异常简单:数图片数量,再数请求次数,然后乘。
读表时先确认一行是按张还是按次,两类基准分开列,混着看容易高估。按次的项目不随图片数量增长:一批 500 张图里做一次矢量化,和做 500 次,成本差 500 倍。
单位换算率
一个换算率覆盖全部:$1.00 = 1,000 单位,也就是一单位等于十分之一美分。官方公布的每一项费用都是整数单位,所以换算成美元是精确值,不会出现四舍五入。
单位从预付余额里扣。同一个账号下的所有 API token 共用这一份余额,多建一个 token 并不会多出第二份预算。API 上手走查讲了 token 从哪来,以及余额如何决定能不能建 token。
预付制还意味着现金流前置:先判断一个月的量级再买包,买多了不过期,但钱已经出去了。所以下面的估算脚本值得先跑一遍。
按张计费的价目表
| 模型线 | 光栅(USD / 单位) | 矢量(USD / 单位) |
|---|---|---|
| Recraft V4.1 Pro、V4.1 Utility Pro | 0.21 / 210 | 0.30 / 300 |
| Recraft V4.1、V4.1 Utility | 0.035 / 35 | 0.08 / 80 |
| Recraft V4 Pro | 0.25 / 250 | 0.30 / 300 |
| Recraft V4 | 0.04 / 40 | 0.08 / 80 |
| Recraft V4 Styles Pro | 0.10 / 100 | 0.12 / 120 |
| Recraft V4 Styles | 0.035 / 35 | 0.05 / 50 |
| Recraft V3 | 0.04 / 40 | 0.08 / 80 |
| Recraft V2 | 0.022 / 22 | 0.044 / 44 |
大部分决策都压在两行上。V4.1 光栅 $0.035 比 V4 的 $0.04 和 V3 的 $0.04 都低,所以留在当前这一代既更新也更便宜。矢量在几乎每一档都是同门光栅的两倍左右,这是一批图预算里最大的一根杠杆。V4.1 那一篇解释了 Pro 与 Utility 后缀换来的是什么。
Utility 是同一代里的另一条线,官方描述它面向更广的通用场景,价格与 V4.1 标准版持平。真正贵的是 Pro 与 Pro Vector,对应更高的输出分辨率。
按次计费与风格相关费用
生成按张计价,其他几乎都按次计价,而且跨度很大:图像矢量化和去背景 $0.01,提示词增强 $0.01,风格创建 $0.005,crisp 放大 $0.004,擦除区域 $0.002。创意放大是异类,$0.25;图像变体 $0.04。
V3 的编辑端点按 V3 生成的价算:图像到图像、重绘、扩图、替换背景、生成背景,光栅一律 $0.04,矢量 $0.08。同样这些操作手动怎么做,Studio 走查里有。
一批任务里既有生成又有后处理时,把按次的项单独拉一列,否则很容易拿按张单价一路乘图片数,把一次 $0.01 的矢量化算成 $0.01 乘以张数。
风格创建必须在估算里单独占一行。建一个风格每次请求 $0.005,响应里会报出来。
# Requires curl and jq.
# Create one reusable style. The response credits field is the charge.
STYLE_ID=$(curl -s -X POST https://external.api.recraft.ai/v1/styles \
-H "Authorization: Bearer $RECRAFT_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"model": "recraftv4_styles", "image_urls": ["https://example.com/reference-1.png"]}' \
| jq -r .id)
echo "$STYLE_ID" # the documented response carries "credits": 5
动手估算一批的成本

唯一致命的计费陷阱在官方文档里写着,而不是藏着的。如果在生成请求上附参考图而不是传 style_id,服务端会创建一个私有风格,于是风格创建费会在每张图成本之上额外计一次,响应的 credits 字段就是两者之和。后续请求复用返回的 style_id,就只付生成费用。
覆盖全表价的估算脚本
# No dependencies. Rates transcribed from the Recraft pricing page;
# API units are the published $1.00 = 1,000 units.
PER_IMAGE_USD = {
"recraftv4_1": 0.035,
"recraftv4_1_utility": 0.035,
"recraftv4_1_pro": 0.21,
"recraftv4_1_utility_pro": 0.21,
"recraftv4_1_vector": 0.08,
"recraftv4_1_utility_vector": 0.08,
"recraftv4_1_pro_vector": 0.30,
"recraftv4_1_utility_pro_vector": 0.30,
"recraftv4_styles": 0.035,
"recraftv4_styles_pro": 0.10,
"recraftv4_styles_vector": 0.05,
"recraftv4_styles_pro_vector": 0.12,
"recraftv4": 0.04,
"recraftv4_pro": 0.25,
"recraftv4_vector": 0.08,
"recraftv4_pro_vector": 0.30,
"recraftv3": 0.04,
"recraftv3_vector": 0.08,
"recraftv2": 0.022,
"recraftv2_vector": 0.044,
}
STYLE_CREATION_USD = 0.005 # Per request, whatever the model.
def batch_usd(model, images, style_creations=0):
"""USD for a batch at the published per-image rate."""
return round(PER_IMAGE_USD[model] * images + STYLE_CREATION_USD * style_creations, 3)
def batch_units(model, images, style_creations=0):
"""The same batch in API units, at $1.00 = 1,000 units."""
return round(batch_usd(model, images, style_creations) * 1000)
print(batch_usd("recraftv4_styles", images=200, style_creations=1)) # 7.005
print(batch_units("recraftv4_styles_vector", images=50, style_creations=1)) # 2505
换个模型字符串,结果就能差一个数量级,所以脚本以它作为唯一开关。200 张图的 V4 Styles Pro 光栅套图是 $20.005;同样张数走 V4 Styles 是 $7.005。
估算顺序建议固定:先按用途选模型,再按张数乘单价,加上一次性的风格创建费,最后加所有按次后处理项。这个顺序写进脚本后,换模型只改一个字符串。
从响应里直接读费用
最省事的核对方式是响应本身:credits 就是这次请求的费用,不用自己算。
# Requires curl and jq. STYLE_ID comes from the create-style call above.
BODY=$(jq -n --arg sid "$STYLE_ID" '{
prompt: "a ceramic mug on a linen cloth, morning light",
model: "recraftv4_styles",
style_id: $sid,
n: 4,
response_format: "url"
}')
curl -s https://external.api.recraft.ai/v1/images/generations \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $RECRAFT_API_TOKEN" \
-d "$BODY" | jq '{credits, urls: [.data[].url]}'
官方给出的建风格响应长这样:
{
"id": "229b2a75-05e4-4580-85f9-b47ee521a00d",
"style": "any",
"creation_time": "2026-08-20T00:00:00Z",
"is_private": true,
"credits": 5
}
GET /v1/users/me 直接返回余额,同时给出 email、id 和 name,所以 worker 可以在开跑前查余额,而不是跑到一半才发现不够。
官方没有公布的部分
预算负责人会问的几个数字,页面上确实没有:
- 最低充值与任何高于公布单价的量级折扣。
- 失败或不被接受的请求是否计费。
- 速率限制、并发上限,以及每个端点的吞吐。
- 延迟、超时和任何 SLA。
- 除
/v1/users/me里那个数字之外,余额在账单记录里如何呈现。 - 任何企业版条款。
Studio 那一边看套餐对比,官方 Credits 页直接写明它与 API 单位是两套体系。第三方网关和汇总站也会公布自己的 Recraft 数字,那是它们的报价而不是 Recraft 的,本篇不复制。
常见问题
一个 API 单位是多少钱? 十分之一美分,按官方公布的 $1.00 = 1,000 单位。公布的每项费用都是整数单位。
单位包会过期或退款吗? 不会。定价页写明不可取消、不可退款,且已购买的单位包不过期。
为什么风格套图比按张单价算出来贵? 因为在生成请求上附参考图会让服务端创建风格,那笔每次请求 $0.005 会额外计一次。
怎么查剩余余额? 对 API 主机发 GET /v1/users/me,返回里的 credits 字段就是余额。
最便宜的模型就该做默认吗? 不该。V2 光栅是表上最便宜的一行,但 V4.1 才是官方默认的当前代,差值是每张 $0.013。
把模型 ID 写进配置而不是代码,并让响应的 credits 字段成为「这次请求花了多少」的唯一真相。