
Leonardo.ai
Leonardo.ai API 快速上手:从申请密钥到生成第一张图片
面向开发者的 Leonardo.ai API 入门教程:购买 API 额度、创建密钥、用 cURL 提交第一个图像生成任务、读取 generationId 并取回结果,并说明 webhook、并发限制与计费方式等注意事项。
Leonardo.ai 的图像生成能力除了可以在网页应用里手动操作,也通过 REST API 对外开放。如果你想把文生图、图生图、视频生成这类能力接进自己的后端服务、批处理脚本或内部工具,就需要走 API 这条路。API 与网页应用的订阅是两套体系:网页应用的免费额度或付费套餐并不会自动解锁 API 调用权限,必须单独购买 API 额度并生成密钥。这篇教程面向有一定 HTTP 请求基础的开发者,从零开始走完「拿到密钥 → 发出第一个生成请求 → 取回图片」的完整链路。如果你更想先在浏览器里直观地试用这个工具,可以先看站内的 Leonardo.ai 工具页,再决定是否接入 API。
准备工作
在写第一行请求代码之前,需要先把账号和额度准备好。以下几项缺一不可。
注册并登录网页应用
Leonardo.ai 的 API 密钥是在网页应用里生成的,所以第一步是注册或登录 Leonardo.ai 的网页应用。没有账号就无法进入 API Access 页面,也就拿不到密钥。
购买 API 额度
这是最容易踩坑的一点:API 访问权限与网页应用的免费额度、订阅套餐是分开的。即使你已经在网页应用里有可用的生成额度,也不能直接拿去调 API。要调用 API,必须单独购买 API Credits。购买入口在网页应用的 API Access 页面里,进入该页面后选择 Buy Credit 即可。
计费方式上,API 用量以美元计价,可以在 API Access 页面查看剩余额度。具体的价格档位、额度包大小会随时间调整,下单前请以官网当前展示的信息为准。
确认调用地址与鉴权方式
API 的基础地址是 https://cloud.leonardo.ai/api/rest/v1(v2 版本的部分接口路径为 https://cloud.leonardo.ai/api/rest/v2)。鉴权使用 Bearer Token,也就是在请求头里带上 authorization: Bearer <YOUR_API_KEY>。请求与响应都使用 JSON,因此需要同时设置 accept: application/json 与 content-type: application/json。
操作步骤
第一步:创建 API 密钥
登录网页应用后,在左侧菜单里找到 API Access,进入该页面。页面上会有一个 Create New Key 按钮,点击它开始创建密钥。
创建时需要给密钥起一个名字,方便日后区分用途。命名建议带上环境或服务标识,例如 myapp-prod 表示生产环境,backend-service 表示某个后端服务。这样在排查用量或需要轮换密钥时,能一眼看出哪把密钥属于哪个系统。
创建过程中还可以选择性地配置一个 webhook 回调地址。配置之后,生成任务完成时服务端会主动把结果推送到这个地址,你就不必反复轮询查询任务状态。如果暂时不确定要不要用回调,可以先跳过,后续再补。
密钥创建完成后请妥善保存。不要把它写进前端代码或任何会分发给终端用户的客户端代码里,因为任何拿到密钥的人都能以你的账号身份消耗额度。正确的做法是把密钥放在服务端的环境变量或密钥管理服务中,由后端代理请求。
第二步:发出第一个生成请求
密钥就绪后就可以调用生成接口了。图像生成使用 POST /generations 端点。下面是一个可以直接运行的 cURL 示例:
curl --request POST \
--url https://cloud.leonardo.ai/api/rest/v1/generations \
--header 'accept: application/json' \
--header 'authorization: Bearer <YOUR_API_KEY>' \
--header 'content-type: application/json' \
--data '
{
"alchemy": false,
"height": 1080,
"modelId": "7b592283-e8a7-4c5a-9ba6-d18c31f258b9",
"contrast": 3.5,
"num_images": 4,
"styleUUID": "111dc692-d470-4eec-b791-3475abac4c46",
"prompt": "A serene watercolor painting of a mountain lake at sunrise",
"width": 1920,
"ultra": false
}'
把 <YOUR_API_KEY> 替换成上一步生成的密钥即可。请求体里的字段含义如下:
| 字段 | 类型 | 说明 |
|---|---|---|
prompt |
string | 描述想要生成画面的文本提示词 |
modelId |
string | 指定使用的模型,不同模型支持的参数与出图风格不同 |
width / height |
number | 输出图片的宽高像素值 |
num_images |
number | 本次任务生成几张图 |
styleUUID |
string | 风格预设的标识,用于统一出图风格 |
contrast |
number | 对比度相关的调节参数 |
alchemy |
boolean | 是否启用增强处理 |
ultra |
boolean | 是否启用更高画质的处理模式 |
请求发出后,返回结果里会包含一个 generationId。这个 ID 是后续取回图片的凭据,需要保存下来。生成是异步的,也就是说接口不会在响应里直接返回图片,而是先返回任务标识,等任务跑完再去查询结果。
第三步:用 generationId 取回生成结果
拿到 generationId 之后,用它去查询该次生成任务的状态与产物。查询时同样需要带上 Bearer 鉴权头。由于生成需要一定时间,通常的做法是间隔若干秒轮询一次,直到任务状态变为完成,再从响应里取出图片地址。
如果不想写轮询逻辑,可以在创建密钥时或后续配置 webhook 回调地址。任务完成时服务端会把结果推送到该地址,你的服务只需暴露一个接收端点即可,这样能省掉轮询带来的额外请求和延迟。
第四步(可选):从网页应用导出 API 代码
如果不想从零手写请求体,可以利用 Get API Code 功能。在网页应用里完成一次图像或视频生成后,可以把这次生成直接导出为可用的 API 代码。这样得到的参数组合是经过网页应用验证的,适合作为自己代码的起点,再逐步替换提示词、模型和尺寸。
一个完整示例
下面把前面的步骤串成一个最小可运行的流程。假设你已经拿到了 API 密钥,并把它放在环境变量 LEONARDO_API_KEY 里。
第一步,提交生成任务。
curl --request POST \
--url https://cloud.leonardo.ai/api/rest/v1/generations \
--header 'accept: application/json' \
--header "authorization: Bearer $LEONARDO_API_KEY" \
--header 'content-type: application/json' \
--data '
{
"alchemy": false,
"height": 1080,
"modelId": "7b592283-e8a7-4c5a-9ba6-d18c31f258b9",
"contrast": 3.5,
"num_images": 4,
"styleUUID": "111dc692-d470-4eec-b791-3475abac4c46",
"prompt": "A serene watercolor painting of a mountain lake at sunrise",
"width": 1920,
"ultra": false
}'
第二步,从响应里取出 generationId。响应是 JSON 格式,其中包含本次任务的标识。把这个值记下来,下一步要用。
第三步,用该 ID 查询任务结果。带上同样的鉴权头请求查询接口,等待任务完成后从返回内容里取出图片地址。如果任务尚未完成,稍等几秒再查一次。
第四步,下载或转发图片。拿到图片地址后,按你的业务需要下载到本地、上传到自己的对象存储,或直接返回给前端展示。
整个链路的核心只有两点:提交任务拿到 ID,再用 ID 换结果。把这两步封装成一个函数,后续换模型、换提示词都只是改请求体的事。
注意事项
API 套餐与网页应用套餐相互独立
这是新手最容易误解的地方。网页应用的免费额度和订阅套餐只作用于网页应用本身,不会解锁 API 调用。要调 API,必须单独购买 API 额度。反过来,API 额度也不等同于网页应用里的订阅权益。规划预算时要把这两笔开销分开算。
密钥安全
API 密钥等同于账号在 API 层面的身份凭证。不要把它嵌入客户端代码,不要提交到公开的代码仓库,也不要在日志里明文打印。建议通过环境变量或密钥管理服务注入,并定期轮换。
并发、队列与速率限制
API 存在并发限制与用量上限。当并发任务数达到上限时,新提交的任务会进入队列等待,而不是立即失败。设计批量生成流程时,需要把排队等待时间考虑进去,避免因为超时误判为失败而重复提交。具体的并发数值与速率上限请以官网当前信息为准。
计费透明度
API 用量以美元计价,剩余额度可以在 API Access 页面查看。不同模型、不同分辨率、不同生成张数消耗的额度并不相同,批量任务上线前建议先用小批量试跑,估算单张成本,再决定生产环境的参数配置。价格与额度规则可能调整,请以官网当前信息为准。
内容安全
平台对生成内容有安全策略。涉及敏感题材的生成请求可能被拦截或返回相应提示,业务侧需要处理这类返回,而不是把它当成普通的网络错误重试。
模型与接口版本
可用的模型列表会持续更新,不同模型对参数的支持范围也不一样。例如某些模型支持特定的宽高比或额外的控制参数,换模型时需要重新核对请求体字段。接口本身也区分 v1 与 v2 路径,接入前先确认目标端点属于哪个版本。模型标识、参数支持范围与端点路径都可能变化,请以官网当前文档为准。
善用回调与导出功能
如果生成任务量大,轮询会带来不必要的请求开销和延迟,此时配置 webhook 回调更合适。如果只是想快速验证某个参数组合是否可行,用 Get API Code 从网页应用导出代码,比手写请求体更省事。