Формат ответа
Оба запроса отвечают одним конвертом: {"code":…,"msg":…,"data":…}, где
code повторяет HTTP-статус, а полезное лежит в
data. Тот же конверт приходит и при отказе — разбирать две формы ответа
не нужно.
/api/v1/jobs/createTask
| Поле | Тип | Что в нём |
|---|---|---|
| data.taskId | строка | Номер задачи. Больше в ответе ничего нет и быть не может — работа только началась. |
/api/v1/jobs/recordInfo
| Поле | Тип | Что в нём |
|---|---|---|
| data.taskId | строка | Номер задачи — тот же, что вернул createTask. |
| data.model | строка | Имя модели в том виде, в каком его прислал клиент. |
| data.state | строка | Состояние задачи: waiting, queuing, generating, success или fail. |
| data.param | строка | Параметры, с которыми задача создана, — строкой JSON внутри JSON. |
| data.resultJson | строка | Результат строкой JSON внутри JSON: {"resultUrls":["https://…"]} — разбирается вторым разбором. До завершения задачи — пустая строка. |
| data.failCode | строка | Код неудачи из таблицы ниже. У остальных задач — пустая строка. |
| data.failMsg | строка | Причина неудачи словами. Иначе пустая строка. |
| data.costTime | число | Сколько задача заняла, миллисекунды. Пока не завершилась — null. |
| data.completeTime | число | Когда завершилась, миллисекунды эпохи Unix. Пока не завершилась — null. |
| data.createTime | число | Когда создана, миллисекунды эпохи Unix. |
| data.updateTime | число | Когда состояние менялось в последний раз, миллисекунды эпохи Unix. |
| data.creditsConsumed | число | Сколько кредитов списано. Ноль, пока задача не завершилась, и ноль у неудачной. |
Где лежит ссылка на файл
Поле resultJson приходит строкой, а не объектом: внутри неё лежит ещё один JSON вида {"resultUrls":["https://…"]}. Разобрать его нужно вторым вызовом разбора JSON — json.loads в Python, fromjson в jq, JSON.parse в JavaScript. То же и у поля param, в котором лежат параметры создания задачи.
import json
record = answer["data"] # конверт ответа recordInfo
result = json.loads(record["resultJson"]) # разбор второй: строка → объект
url = result["resultUrls"][0] # ссылка на готовый файл
Ссылка живёт 14 дней: файлы результата хранит поставщик, и дольше этого срока
адрес просто перестаёт открываться. Если файл нужен дальше — скачивайте его к себе сразу после
того, как задача пришла в состояние success.
Тот же разбор в готовом виде, вместе с ожиданием задачи, показан в разделе Как устроена задача.