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 Pro0.21 / 2100.30 / 300
Recraft V4.1、V4.1 Utility0.035 / 350.08 / 80
Recraft V4 Pro0.25 / 2500.30 / 300
Recraft V40.04 / 400.08 / 80
Recraft V4 Styles Pro0.10 / 1000.12 / 120
Recraft V4 Styles0.035 / 350.05 / 50
Recraft V30.04 / 400.08 / 80
Recraft V20.022 / 220.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

动手估算一批的成本

一摞圆盘向底部逐层增大的示意图,旁边有柱状图和一行图片缩略块
本站自绘示意图,非官方示例 AI Tool Blog

唯一致命的计费陷阱在官方文档里写着,而不是藏着的。如果在生成请求上附参考图而不是传 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 直接返回余额,同时给出 emailidname,所以 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 字段成为「这次请求花了多少」的唯一真相。