获取任务详情
本页由 ModelFold 文档站根据上游官方 OpenAPI 文档同步生成。接口路径、参数、示例与官方保持一致;品牌与 API 域名已替换为 ModelFold。
接口
GET /jobs/recordInfo
完整 URL: https://ai.modelfold.online/v1/jobs/recordInfo
鉴权:所有请求都需要
Authorization: Bearer <API_KEY>请求头。
概述
使用此端点查询通过Market模型API创建的任何任务的状态和结果。这是一个统一的查询接口,适用于Market类别下的所有模型。
INFO
适用于所有通过 POST /api/v1/jobs/createTask 创建的任务。聊天模型为同步接口,没有可查询的任务。
任务状态
| 状态 | 描述 | 操作 |
|---|---|---|
waiting | 任务已排队等待处理 | 继续轮询 |
queuing | 任务在处理队列中 | 继续轮询 |
generating | 任务正在处理中 | 继续轮询 |
success | 任务成功完成 | 解析resultJson获取结果 |
fail | 任务失败 | 查看failCode和failMsg了解详情 |
轮询最佳实践
推荐的轮询间隔
- 初始轮询(前30秒): 每2-3秒
- 30秒后: 每5-10秒
- 2分钟后: 每15-30秒
- 轮询时长: 部分视频任务耗时超过 10 分钟,请持续轮询直至 state 为 success 或 fail。
TIP
使用指数退避来减少服务器负载和API成本。
使用回调而非轮询
对于生产应用,我们强烈建议在创建任务时使用callBackUrl参数:
- 无需轮询: 您的服务器自动接收通知
- 降低API成本: 消除持续的轮询请求
- 更好的性能: 任务完成时立即通知
- 降低延迟: 完成和通知之间无延迟
查看各个模型文档了解回调实现详情。
处理已完成的任务
当state为success时:
- 将
resultJson字符串解析为JSON - 提取
resultUrls数组 - 立即下载生成的内容
- 将内容存储在您自己的存储中
重要: 生成文件保留 14 天。
错误处理
json
{
"code": 200,
"msg": "success",
"data": {
"taskId": "task_12345678",
"model": "grok-imagine/text-to-image",
"state": "fail",
"param": "{\"model\":\"grok-imagine/text-to-image\",\"input\":\"{\\\"prompt\\\":\\\"...\\\"}\"}",
"resultJson": null,
"failCode": "400",
"failMsg": "<error detail>",
"completeTime": 1698765432000,
"createTime": 1698765400000,
"updateTime": 1698765432000
}
}常见错误代码
出错时 HTTP 状态仍为 200,请以 code 判断。
| 代码 | 描述 | 解决方案 |
|---|---|---|
401 | 未授权 - API密钥无效或缺失 | 检查您的API密钥 |
422 | 缺少 taskId,或任务不存在 / 不属于当前账号 | 检查 taskId 是否正确 |
500 | 内部服务器错误 | 几分钟后重试 |
501 | 生成失败 | 查看failMsg了解具体错误详情 |
示例: 完整的轮询流程
javascript
async function pollTaskStatus(taskId, maxAttempts = 60, interval = 5000) {
for (let attempt = 0; attempt < maxAttempts; attempt++) {
const response = await fetch(
`https://ai.modelfold.online/v1/jobs/recordInfo?taskId=${taskId}`,
{
headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
}
);
const result = await response.json();
if (result.code !== 200) throw new Error(result.msg);
const { state, resultJson, failMsg } = result.data;
console.log(`尝试 ${attempt + 1}: 状态 = ${state}`);
if (state === 'success') {
const results = JSON.parse(resultJson);
console.log('✅ 任务完成!');
console.log('结果:', results.resultUrls);
return results;
}
if (state === 'fail') {
console.error('❌ 任务失败:', failMsg);
throw new Error(failMsg);
}
// 仍在处理中,等待下次轮询
await new Promise(resolve => setTimeout(resolve, interval));
}
throw new Error('任务在最大尝试次数后超时');
}
// 使用方法
try {
const results = await pollTaskStatus('task_12345678');
console.log('生成的内容URL:', results.resultUrls);
} catch (error) {
console.error('错误:', error.message);
}速率限制
- 最大查询速率: 每个API密钥每秒10次请求
- 推荐间隔: 轮询之间间隔2-5秒
WARNING
过度轮询可能导致速率限制。生产应用请使用回调。
相关资源
请求参数
Path / Query / Header
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
query.taskId | any | 是 | 创建任务时返回的唯一任务标识符。 位置: query |
响应
200 — 请求成功
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
code | integer | 是 | 请求状态码。请求失败时 HTTP 状态仍为 200,请始终以本字段判断:200 表示成功,其他值均表示失败,原因见 msg。常见值:401 API key 无效或缺失;402 积分不足;429 超出频率限制;422 或 500 请求未能处理(请先查看 msg、检查参数,再决定是否重试)。 可选值:200 / 401 / 402 / 404 / 422 / 429 / 433 / 455 / 500 / 501 / 505。 示例:200。 |
msg | string | 是 | 响应消息,失败时的错误描述 |
data | object | 是 | 包含所有任务信息的数据对象 |
data.taskId | string | 否 | 此任务的唯一标识符 示例:task_12345678。 |
data.model | string | 否 | 此任务使用的模型(例如 grok-imagine/text-to-image、seedream-4.0、kling-1.0) 示例:bytedance/seedance-2-5。 |
data.state | string | 否 | 任务的当前状态。请以 state 判断任务结果。 可选值:waiting / queuing / generating / success / fail。 示例:success。 |
data.param | string | 否 | 包含创建任务时使用的原始请求参数的JSON字符串。其中的 input 仍是 JSON 字符串,需要再解析一次。 示例:{"model":"grok-imagine/text-to-image","callBackUrl":"https://your-domain.com/api/callback","input":"{\"prompt\":\"电影肖像...\",\"aspect_ratio\":\"3:2\"}"}。 |
data.resultJson | string | 否 | 结果 JSON 字符串。state 为 success 时返回;失败时可能为 null 或空字符串。 结构如下: - 图像/媒体/视频:{resultUrls: []} - Seedance 2.x 开启 return_last_frame 时:{resultUrls: [], lastFrameUrl: []} - 文本类型:{resultObject: {}} 针对 OmniHuman 系列模型,响应说明如下: - OmniHuman 1.5 Subject Detection(主体检测模型):响应结构为 {resultObject: {mask_urls: ["url1", "url2", ...]}},返回检测到的主体对应的掩码图 URL 列表。该模型返回的 URL 有效期为 1 小时。 - OmniHuman 1.5 Human Identification(人物识别模型):响应结构为 {resultObject: {subject_status: 1}},其中 subject_status 含义为 0 = 不含主体,1 = 含主体,用于标识图片中是否检测到人物主体。 示例: {"resultUrls":["https://example.com/generated-content.jpg"]}。 |
data.response | object | 否 | resultJson 的解析结果,仅在 state 为 success 时返回。 |
data.failCode | string | 否 | 失败码(数字字符串,如 "500")。state 为 fail 时返回;成功时可能为 null 或空字符串。 示例:``。 |
data.failMsg | string | 否 | 失败原因。state 为 fail 时返回;成功时可能为 null 或空字符串。 示例:``。 |
data.costTime | integer | 否 | 处理耗时(秒),成功和失败的任务都会返回。 示例:15。 |
data.completeTime | integer | 否 | 完成时间戳(Unix时间戳,毫秒) 示例:1698765432000。 |
data.createTime | integer | 否 | 创建时间戳(Unix时间戳,毫秒) 示例:1698765400000。 |
data.creditsConsumed | number | 否 | 本次任务消耗的积分详情,表示任务执行过程中实际扣除的积分数量。 |
json
{
"code": 200,
"msg": "success",
"data": {
"taskId": "task_12345678",
"model": "grok-imagine/text-to-image",
"state": "success",
"param": "{\"model\":\"grok-imagine/text-to-image\",\"callBackUrl\":\"https://your-domain.com/api/callback\",\"input\":\"{\\\"prompt\\\":\\\"电影肖像...\\\",\\\"aspect_ratio\\\":\\\"3:2\\\"}\"}",
"resultJson": "{\"resultUrls\":[\"https://example.com/generated-content.jpg\"]}",
"failCode": "",
"failMsg": "",
"costTime": 15,
"completeTime": 1698765432000,
"createTime": 1698765400000,
"updateTime": 1698765432000,
"progress": 45,
"creditsConsumed": 50
}
}401 — 未授权 - API密钥无效或缺失
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
code | integer | 是 | — |
msg | string | 是 | — |
json
{
"code": 401,
"msg": "Unauthorized"
}429 — 速率限制 - 请求过于频繁
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
code | integer | 是 | — |
msg | string | 是 | — |
json
{
"code": 429,
"msg": "Rate limit exceeded"
}