报价
/api/v1/credits/quote计算一次提交要花多少积分,不扣费、不创建任务。请求体和 提交任务 完全相同,参数不合法时返回的错误也相同,可以用来提前校验参数。
开发者
用 API Key 在你自己的服务器上调用牛来AI智能体的生成能力:提交图片、视频、数字人等任务,查询进度,下载结果。API 和网页共用一个账户,按同样的价格扣积分。
所有接口都在 https://niulaiai.top/api/v1 下。生成是异步的:提交后马上返回任务,生成在后台进行;你的程序轮询任务状态,完成后下载结果文件。
Content-Type: application/json。2026-10-15T08:30:12.418Z。任务、素材等 ID 都是 UUID。每个请求都用 API Key 认证。Key 代表你的账户、可以花你的积分,请像密码一样保管。
sk- 开头)只在创建时显示一次,服务器只保存它的哈希。没保存下来的话,撤销后重新创建一个。401。在请求头里带上 Key:
/api/v1/me/…,例如绑定手机号、创建或撤销 Key)和管理后台接口,这些请求返回 403 forbidden。这些操作请在网页上登录后进行。用 curl 和 jq 走一遍完整流程:报价 → 提交一个生成 2 张图片的任务 → 轮询到完成 → 下载图片。在同一个终端里按顺序执行,前面设置的变量后面会接着用。
示例用到 curl 和 jq(macOS:brew install jq;Ubuntu:sudo apt install jq)。
credits 是这次要花的积分;sufficient 为 false 表示余额不够,这时提交会返回 402。这里没传 model_key,用的是图片创作的默认模型。
返回 201 和任务对象,积分已经扣除。2 张图片是同一个任务里的 2 个结果(),各自生成、各自计费,哪张失败就退哪张的积分。
除「可用模型」外,所有接口都要带 API Key。路径里的 {id} 换成实际的 ID。上传素材的 3 个接口见 上传素材。
/api/v1/credits/quote计算一次提交要花多少积分,不扣费、不创建任务。请求体和 提交任务 完全相同,参数不合法时返回的错误也相同,可以用来提前校验参数。
用 tool_slug 选择工具,params 传参数,references 传参考素材。参数不满足要求时,报价和提交都会返回错误,所以可以先用报价接口试参数。
参考图片、视频、音频要先上传成为素材,提交任务时再用 references[].asset_id 引用。上传分 3 步:申请上传地址 → 把文件 PUT 到这个地址 → 确认上传。
/api/v1/assets/upload-policy出错时返回 4xx 或 5xx 状态码和下面格式的 JSON。message 是可以直接展示给用户的中文说明(部分字段格式错误是英文),code 供程序判断,detail 是附加信息,没有时为 null。
sufficient 为 false 时不要提交;也可以用它在提交前校验参数。GET /api/v1/batches?ids=… 一次最多查 50 个任务,不要每个任务单独轮询。GET /api/v1/batches?limit=10 看任务是否已经创建(可以用 title 放你的订单号来辨认),再决定是否重试。要多张图片请用 count,不要并发提交多个相同请求。service_unavailable 表示 AI 服务维护中,这次没有扣积分,过几分钟再试;查询类请求遇到 5xx 可以直接重试。2.7。{ items, nextCursor },按创建时间从新到旧排列。把 nextCursor 原样作为 cursor 参数传入取下一页;为 null 表示没有更多了。401 unauthorized。results任务状态变成 completed(全部成功)、partial(部分成功)、failed(失败)或 canceled(已取消)之一时就结束了,失败和取消的部分已自动退款。图片一般几十秒,视频一般 1–3 分钟。
下载结果文件不需要 API Key。asset.url 可能是完整地址,也可能是以 / 开头的本站地址,这时在前面拼上 https://niulaiai.top。
sufficientfalse 时提交会返回 402/api/v1/batches校验参数,按报价扣除积分并创建任务,立即返回;生成在后台进行。
返回 201 和任务对象(字段见 查询任务)。常见错误:400 参数不满足工具的要求(message 会说明原因)、402 积分不足、404 引用的素材不存在或未确认上传、422 字段格式不对、503 AI 服务维护中(没有扣积分)。
/api/v1/batches/{id}返回任务的最新状态和结果。任务不存在或不属于你的账号时返回 404。
/api/v1/batches按创建时间从新到旧列出任务。同时轮询多个任务时,用 ids 一次查回来,不要逐个请求。
返回 { items, nextCursor },items 中每项都是完整的任务对象。
/api/v1/batches/{id}/cancel取消还在排队、没有开始生成的结果,并退回它们的积分;已经开始生成的结果不能取消,会继续生成。返回取消后的任务对象。
canceled;只取消了一部分时,等其余结果结束后再确定任务状态(例如 partial)。409 conflict(「任务已开始生成,无法取消」)。/api/v1/batches/{id}删除任务。还有结果在生成时返回 409 conflict(「任务生成中,完成后才能删除」);只剩排队中的结果时,会先取消并退回积分,再删除。画布上的任务在作品还没放进画布卡片时也返回 409 conflict,在网页上打开那个画布后再删除即可。
/api/v1/model-routes/public列出可以选择的模型。提交时把 key 作为 model_key 传入。
/api/v1/assets列出你的素材:确认上传完成的文件和生成的结果,已删除的不返回。查询单个素材用 GET /api/v1/assets/{id},返回一个素材对象。
/api/v1/usage/summary/api/v1/usage/ledgerposter-layersecommerce-image-setslot 填「商品」,params.modules 选择模块和每个模块的张数,单次最多 12 张;模块列表等其余参数本文不展开。depth-video-cloneviral-breakdownresults[].text。viral-cloneparams.analysis_id(爆款拆解任务的 ID)和 params.speech(rewrite 改写口播 / keep 保留口播 / none 不要口播)。fashion-detectfashion-modelfashion-tryonfashion-videocharacterparams.kind 为 person 或 product,params.showcase 为 true(默认)时另外生成 5 秒展示视频。anime-characterdigital-humancanvas-textresults[].text。video-segment-retakeparams.start、params.end 是重拍区间(秒),prompt 写重拍内容。video-watermark-removevideo-subtitle-erasevideo-quality-enhancehot-video-remixparams.count 是生成条数(1–10)。reference-video-splitresults[].json.shots。video-editorparams.clips 时间线由网页剪辑台生成,本文不展开。voiceovervideo-dubprompt 必填(使用自带模板的技能时可以不填)。references 只能是图片,最多 9 张(使用技能时以技能的限制为准)。提示词里用「图1」「图2」…指代参考图,顺序和 references 一致。prompt 和 references 至少要有一个。capabilities.references,见上面的模型列表);开启后最多图片 30、视频 10、音频 10。role 指定用法:first_frame 首帧、last_frame 尾帧、reference_image 参考图。让一张人物照片开口说话(图片口播),或者给一段人物视频重新对口型(视频对口型)。不需要 model_key,按形象素材是图片还是视频自动选择。
slot 填「形象」。图片 → 图片口播,宽、高需要在 400–7000 像素之间;视频 → 视频对口型,视频 3–119 秒,宽、高在 640–2048 像素之间。params.tts;两者都有时用音频。video-watermark-remove(去水印)、video-subtitle-erase(字幕擦除)和 video-quality-enhance(画质增强)处理一个已有的视频:references 里放且只放 1 个视频,不传 model_key,按视频秒数计费。
file_namemime_typesize_bytesgroup_id/api/v1/assets/complete服务器确认文件已经到达,读出尺寸和时长(视频还会截一张封面),返回素材对象(字段见 素材列表)。对已经确认过的素材再调用,会直接返回该素材。
400 upload_incomplete:还没收到文件,确认第 2 步成功后再调用。413 file_too_large:实际文件超过上限,这个素材已被删除。400 invalid_media:视频或音频无法解析,这个素材已被删除,请检查格式后重新上传。503 probe_unavailable:服务器暂时读不到文件,稍后重试这一步即可。把 assetId 放进 references。图片创作的提示词里,参考图按 references 的顺序称为图1、图2…
400 too_many_references400 analysis_not_found400 unsupported_media_type400 upload_incomplete400 invalid_media401 unauthorized402 insufficient_creditsdetail.need 是需要的积分,detail.have 是当前可用积分。403 forbidden404 not_found409 conflict413 file_too_large422 validation_errordetail.fields 列出每个问题 { field, message },field 是字段路径,例如 references.0.asset_id;工具参数出错时是 params 里的字段名,例如 count。500 internal_error503 service_unavailable503 probe_unavailablewidthheightdurationMstextjsonfinalPromptphasestartedAt / finishedAtetaSecondstoolSlug / batchIdgroupId / savedcreatedAt