1. 添加任务接口说明
花容AI
  • 默认模块
    • 花容AI-产品说明
    • 花容AI-使用说明
  • 添加任务接口说明
    • 标准照片美化任务 API说明
  • 照片美化任务 API
    • 提交标准照片美化任务
      POST
  1. 添加任务接口说明

标准照片美化任务 API说明

本文档描述 花容 自有标准任务接口。

1. 接口概览

POST https://api.hrlj.cn/api/v1/task/add
Content-Type: application/json
Authorization: HMAC-SHA512-V1 Credential=<AK>,Signature=<签名>,Timestamp=<Unix秒时间戳>

请求参数校验、身份校验和账户校验均通过后,接口按门店套餐规则计费并创建异步任务:有效时长套餐内不扣片量,否则扣减 1 个片量。提交成功只表示任务已入队,不表示照片已经处理完成;最终结果通过 notifyUrl 回调。

重要:当前接口通常以 HTTP 200 返回业务成功和业务异常。调用方必须判断响应 JSON 的 code,不能只判断 HTTP 状态码。

2. 导入 Collection

导入文件:docs/postman/standard-task.postman_collection.json

Collection 已包含 Postman/Apifox 兼容的签名脚本、标准请求、响应断言和成功/异常示例。脚本使用 const CryptoJS = require('crypto-js'),未使用 Apifox 不支持的 pm.require。示例 URL 未替换时脚本会终止请求,避免误扣片量。

3. Collection 变量

变量必填条件说明
base_url是服务地址,默认 https://api.hrlj.cn,末尾不要加 /
ak是门店用户 Access Key
sk是门店用户 Secret Key;只参与本地签名,不放进请求体
input_image_url是原图 HTTP(S) 绝对 URL,服务端及 Linux consumer 均需可访问
notify_url是异步结果回调 HTTP(S) 绝对 URL
storage_provider是结果图存储类型,见下表;默认 4
result_upload_urlprovider=4结果图预签名上传绝对 URL
result_key非 PRE 通常需要结果对象 Key,例如 retouch/2026/result.jpg
storage_bucket按存储类型Bucket;ImageX 时填写 ServiceId
storage_endpoint按存储类型Endpoint 主机名,不带协议和路径
storage_region_id按存储类型区域 ID,例如 cn-guangzhou
storage_token临时凭证时STS Token 或存储服务 Token
storage_access_key按存储类型存储 AK
storage_access_secret按存储类型存储 SK
storage_domain可选自定义访问域名,写入 auth.options.domain
trace_id自动生成前置脚本生成的调用跟踪 ID
server_task_id自动保存成功后保存服务端任务 ID

AK/SK 建议放在 Environment 中,不要将真实值保存到共享 Collection。

4. 请求参数

请求体支持 protobuf JSON 的 camelCase 和 snake_case 字段名。本文统一使用 camelCase;同一字段不要重复传两种写法。

4.1 顶层字段

字段类型必填校验/说明
urlstring是原图绝对 URI,建议使用 HTTP(S) URL
authobject是结果图片上传授权,见 4.2
parameterobject是输出和美化参数,见 4.3~4.9
notifyUrlstring是异步回调绝对 URI;snake_case 为 notify_url
notifyAttachstring否回调原样返回,最长 255;对象应先序列化为 JSON 字符串

4.2 auth 结果存储授权

字段类型必填校验/说明
providerinteger是枚举 1~6,不能为 0
preUrlstringprovider=4完整预签名上传 URL,必须是绝对 URI,不能只传对象 Key
bucketstring按 provider最长 255;ImageX 时为 ServiceId
endpointstring按 provider主机名格式,不能带协议和路径
regionIdstring按 provider最长 255;snake_case 为 region_id
tokenstring临时授权时最长 1024
accessKeystring按 provider最长 1024
accessSecretstring按 provider最长 1024
uploadKeystring非 PRE 通常需要非空时长度 1~1024
optionsobject<string,string>否最多 32 对,值必须为字符串
provider存储类型建议提供的字段
1AWS S3 / S3 兼容bucket、endpoint、regionId、accessKey、accessSecret、uploadKey,临时凭证另加 token
2七牛bucket、token、uploadKey;访问域名可放 options.domain
3阿里云 OSSbucket、endpoint、accessKey、accessSecret、uploadKey,临时凭证另加 token
4PRE 预签名上传preUrl;入库时会作为实际上传地址
5火山 TOSbucket、endpoint、regionId、accessKey、accessSecret、uploadKey,临时凭证另加 token
6火山 ImageXbucket(ServiceId)、regionId、accessKey、accessSecret、uploadKey,临时凭证另加 token

提交阶段只校验格式,不会连接对象存储验证授权。Bucket、Token 或预签名 URL 无效时,任务可能提交成功但随后上传失败。

4.3 parameter 和 output

字段类型必填范围/说明
parameter.versioninteger是>=1,当前传 1
parameter.outputobject是输出参数
parameter.paramsobject是美化参数主体,允许传 {}
parameter.ageRangeint[2]否男女共用 [最小年龄,最大年龄],每项 0~100
parameter.menAgeRangeint[2]否男性独立范围,优先于 ageRange
parameter.womenAgeRangeint[2]否女性独立范围,优先于 ageRange
output.qualityinteger是50~100,建议 95;省略后的零值不合法
output.maxSizeinteger否>=0,0 表示不限制
output.waterMarkstring否水印配置,最长 255
output.ppiinteger否>=0,0 表示不调整
output.keepOriginalSizeinteger否0/1,是否保持原图尺寸

协议层当前只校验年龄数组长度和 0~100;调用方还应保证最小年龄不大于最大年龄。

4.4 基础调整和开关

字段类型/范围作用
intellectColorAdjustinteger 0/1智能色彩增强
autoExposureinteger 0/1自动曝光,与智能色彩增强独立
temperature / tintinteger -100~100色温 / 色调
saturation / vibranceinteger -100~100饱和度 / 自然饱和度
exposure / brightnessinteger -100~100曝光 / 亮度
blacks / shadows / highlights / whitesinteger -100~100黑色 / 阴影 / 高光 / 白色
contrast / clarity / dehazeinteger -100~100对比度 / 清晰度 / 祛雾
sharpen / denoiseLum / denoiseColorinteger 0~100锐化 / 亮度降噪 / 彩色降噪
backgroundSmoothinteger 0/1背景平滑
backgroundGoofRemoveinteger 0/1背景穿帮去除
backgroundRefineinteger 0/1背景修复
bodyHeightinteger 0~100身高调整

未传数字字段按 0 处理。0 对开关表示关闭,对调整项表示不调整。

4.5 人像效果数组

大部分人像参数为长度固定的 int[4]。当前 Linux consumer 的映射为:

[男性成年值, 女性成年值, 兼容保留值, 少年值]

consumer 会把第 1 位用于男性成年/老年,并作为女性老年的兼容值;第 2 位用于女性成年;第 4 位用于男女少年;第 3 位当前未独立消费。不区分人群时建议四位相同,例如 [40,40,40,40]。

以下为 int[4] 且每项 0~100:

字段作用字段作用
backgroundFlyawaysRemove背景祛碎发bodyFlyawaysRemove人物祛碎发
nevusRemove祛痣faceDefectRemove面部祛瑕疵
bodyDefectRemove身体祛瑕疵faceNeutralGrey面部中性灰
bodyNeutralGrey身体中性灰faceSmooth面部匀肤
bodySmooth身体匀肤faceTextureEnhance面部纹理增强
bodyTextureEnhance身体纹理增强skinWhite皮肤美白
skinRed皮肤红润skinGloss皮肤光泽
skinShadow皮肤阴影skinHighlights皮肤高光
wrinkleForeheadRemove祛抬头纹shinyClean祛油光
faceLightBalance光影平整faceLightDefinition光影立体
faceContour面部轮廓pouchRemove祛黑眼圈
wrinklePeriorbitalRemove祛眼周纹wrinkleNasolabialRemove祛法令纹
lipRemove祛唇纹wrinkleNeckRemove祛颈纹
doubleChinRemove祛双下巴beautyBellyRemove祛妊娠纹
clothesWrinkleThinRemove祛细褶皱clothesWrinkleThickRemove祛粗褶皱
faceAutoBeauty智能面部美化eyeBright亮眼
faceSkinUnify面部肤色统一bodySkinUnify身体肤色统一
faceLowFreqSmooth面部低频磨皮bodyLowFreqSmooth身体低频磨皮
faceHighlights面部高光teethWhite牙齿美白
chinReduce削下巴

teethBeauty 为 int[4],但每项只能为 0/1,表示牙齿修复开关。

以下为液化/形变 int[4],每项 -100~100:

字段作用字段作用
shrinkHead小头faceVV 脸
faceSize大小脸faceSlim瘦脸
hairline发际线mandibleSlim瘦颌骨
zygomaticBoneSlim瘦颧骨chinAugmentation垫下巴
chinHeight下巴高度browLeftHeight / browRightHeight左/右眉高度
browLeftTilt / browRightTilt左/右眉倾斜eyeLeftSize / eyeRightSize左/右眼大小
eyeLeftWidth / eyeRightWidth左/右眼宽eyeDistance眼距
eyeLeftSlant / eyeRightSlant左/右眼倾斜noseSize / noseHeight鼻子大小/高度
mouthSize / mouthHeight / mouthWidth嘴巴大小/高低/宽度lipTopThickness / lipBottomThickness上/下唇厚薄
faceShadow面部阴影

bodyAutoSlim 为 int[5],每项 0~100。前四位采用上述人群位,第五位为孕肚保护值。

4.6 LUT、曲线、HSL、暗角和颗粒

字段子字段和范围说明
luts[{"path":string,"opacity":0~100}]LUT 列表;opacity=0 等同关闭
rgbCurvesall/red/green/blue 点数组每点 {x:0~255,y:0~255}
hslhue/saturation/lightness各固定 8 项,每项 -100~100
vignetteamount/size/feather/roundness均为 0~100
graincount/size/value数量、大小、强度,均为 0~100
selectiveColor.mode0/1可选色模式
selectiveColor.red/green/blue/cyan/magenta/yellow/white/black/neutralint[4]各固定 4 项,每项 -100~100

HSL 的 8 位颜色通道顺序由处理 SDK 约定,调用方应沿用预设顺序且不得增减长度。

4.7 换背景和换天空

字段类型/范围说明
replaceBackground.enable0/1是否换背景
replaceBackground.pathstring背景素材路径
replaceBackground.rgbint[3] 0~255背景 RGB
replaceBackground.opacity / edgeIntensity0~100透明度 / 边缘强度
replaceSky.enable / syncBasicAdjust0/1是否开启 / 是否同步基础调整
replaceSky.pathstring天空素材路径,空时无效
replaceSky.opacity / blur0~100透明度 / 模糊;透明度 0 等同关闭
replaceSky.xPos / yPos-100~100水平 / 垂直位置
replaceSky.exposure / contrast / temperature / tint / saturation-100~100天空基础调整
replaceSky.edgeEffect / colorBias / scale0~100边缘过渡 / 色彩偏向 / 缩放

4.8 美妆 cosmetic

enable 为 0/1。foundation、lipstick、brow、iris、eyeShadow、blush、groom、lashes 均为 CosmeticItems[4],依次表示粉底、口红、眉毛、虹膜、眼影、腮红、美容和睫毛。

每个 CosmeticItems 格式为 {"items":[...]},非空时允许 1~10 项。单项格式:

{"type":"素材或效果类型","intensity":50,"color":[255,128,96]}

type 不能为空,intensity 为 0~100,color 非空时必须为 3 项且每项 0~255。

5. 请求示例

{
  "url": "https://cdn.example.test/input.jpg?signature=...",
  "auth": {
    "provider": 4,
    "preUrl": "https://bucket.example.test/output.jpg?signature=..."
  },
  "parameter": {
    "version": 1,
    "output": {
      "quality": 95,
      "maxSize": 0,
      "waterMark": "",
      "ppi": 0,
      "keepOriginalSize": 0
    },
    "params": {
      "intellectColorAdjust": 0,
      "autoExposure": 1,
      "faceDefectRemove": [40, 40, 40, 40],
      "faceNeutralGrey": [30, 30, 30, 30],
      "faceAutoBeauty": [20, 20, 20, 20],
      "eyeBright": [20, 20, 20, 20]
    },
    "ageRange": [12, 60]
  },
  "notifyUrl": "https://client.example.test/retouch/callback",
  "notifyAttach": "{\"source\":\"postman\",\"traceId\":\"standard-001\"}"
}

6. 签名算法

timestamp = 当前 Unix 秒时间戳
rawBody   = 变量替换后、最终实际发送的原始 JSON 字符串
data      = timestamp + rawBody
signature = lowercase_hex(HMAC-SHA512(key=SK, message=data))
header    = HMAC-SHA512-V1 Credential=AK,Signature=signature,Timestamp=timestamp
  • 时间戳单位是秒,与服务端误差不能超过 5 分钟。
  • 三个认证字段之间不要加空格。
  • 签名覆盖原始请求体;签名后修改空格、换行、字段顺序或格式化 JSON 都会验签失败。
  • 签名为小写十六进制字符串。

7. 同步返回值

成功响应:

{
  "code": 200,
  "message": "success",
  "data": {"id": "66bf1234567890abcdef1234"}
}
字段类型说明
codeinteger业务码;200 表示创建成功
messagestring成功时为 success
data.idstring服务端生成的 24 位任务 ID,用于日志和回调关联

失败响应:

{
  "code": 1001,
  "message": "参数错误:invalid SdkTaskAddRequest.Parameter: ..."
}

失败时没有 data。客户端应记录完整 message,程序分支以 code 为准。

8. 本接口异常码

code含义常见原因处理建议
200成功已按套餐规则计费并入队等待回调,不要重提
1001参数错误JSON 绑定失败、URI 非法、数值越界、数组长度错误、provider=0修正请求
1005内部服务器错误未分类内部异常稍后重试前先核对是否已创建
1006数据库错误账户数据解析等已归类的数据库异常核对账户状态后再重试
1100缺少认证头未执行脚本或缺少 Authorization修正请求头
1101认证头格式错误逗号后有空格、字段缺失、时间戳不是整数秒修正签名实现
1300用户不存在AK 不存在或错误更换正确 AK
1303用户已禁用AK 对应账户被禁用联系管理员
1500门店不存在用户绑定门店不存在联系管理员
1600余额不足无可用片量/有效套餐充值后重提
1604扣费失败余额更新冲突或账户写入失败先核对账单再决定重试
1801签名无效SK 错误、签名 body 不一致、编码错误重新计算签名
1802签名已过期超出 ±5 分钟或使用毫秒时间戳校时并重新签名
1803不支持的算法算法不是 HMAC-SHA512-V1修改算法名

1002/1003/1004 是统一响应层保留的未授权、禁止访问和资源不存在码,主流程通常不直接产生,调用方可作通用兼容。

参数异常应从 message 最末层字段定位。例如 invalid Params.IntellectColorAdjust: value must be in list [0 1] 表示 parameter.params.intellectColorAdjust 只能传整数 0/1,不能传 true/false。

9. 异步回调

回调请求为 POST application/json:

{
  "code": 2,
  "message": "success",
  "data": {
    "id": "66bf1234567890abcdef1234",
    "attach": "{\"source\":\"postman\",\"traceId\":\"standard-001\"}"
  }
}
字段类型说明
codeinteger任务状态,不是提交接口业务码
messagestring处理说明;失败时为失败原因
data.idstring与提交响应 data.id 一致
data.attachstringnotifyAttach 原样字符串
回调 code状态说明
2完成处理并上传完成
-1失败下载、处理或上传失败,原因见 message
-2取消任务被取消
0待处理内部保留状态,正常终态回调通常不用
1处理中内部保留状态,正常终态回调通常不用

接收方必须返回:

HTTP/1.1 200 OK
Content-Type: text/plain

success

HTTP 状态不是 200,或响应体不是精确的小写文本 success,都会被判为通知失败并按配置重试。不要返回 JSON、Success 或附加内容。

10. 重试和幂等

标准接口没有调用方自定义任务 ID,也没有幂等键。网络超时后盲目重发可能重复创建任务并再次扣片量。

  1. 收到响应时按 code 处理。
  2. 仅在连接中断、完全无响应时进入人工或业务侧核对流程。
  3. 保留请求时间、AK(不要记录 SK)、trace_id、响应和回调日志,确认未创建后再重试。
  4. 业务侧如需幂等,应建立请求状态表;

11. 常见排查

  • pm.require is not a function:使用本 Collection,不要改成 pm.require。
  • 请先配置 ak 和 sk:在 Collection 或 Environment 中填写实际值并选中正确环境。
  • PreUrl: value must be absolute:preUrl 必须是完整 https://... 上传 URL,不能是对象 Key。
  • 签名无效:确认对变量替换后的最终 body 签名,并关闭签名后自动格式化 body 的功能。
  • 提交成功但处理失败:检查原图有效期、consumer 网络、结果上传授权及回调服务。
  • PRE 上传失败:预签名 URL 必须允许 consumer 的上传方法,并在任务执行期间有效。

最终校验规则以 api/api.proto 和 api/params/params.proto 为准。

修改于 2026-08-18 10:56:29
上一页
花容AI-使用说明
下一页
提交标准照片美化任务
Built with