Перейти к основному содержанию

Краткий ответ

Запросите API задач по task_id; возвращаемое значение quota — это общая стоимость видео. Сумма двух записей журнала (предварительное списание + окончательный расчет) равна этому значению, и quota в подробном представлении «Асинхронные задачи» — это то же самое число.
quota ÷ 500,000 = USD. Выполняйте аутентификацию с помощью персонального access token (начинающегося с nap_, а не ключа API sk-). Ему требуется только разрешение «Использование и личные записи · Чтение» («Usage & personal records · Read»). Инструкции по его созданию см. в статье Что такое персональный access token?. Устаревшие системные tokens планируется вывести из эксплуатации 2026-11-11 (UTC+8). Не пытайтесь сопоставлять записи журнала по одной через API запроса журналов: ни одна из записей не содержит task_id, а в записи окончательного расчета поле request_id пустое.

Как связаны три числа

Видео Seedance тарифицируются по схеме «предварительное списание при отправке, расчёт разницы по завершении», поэтому для одного видео создаются две записи журнала, тогда как API задачи и представление сведений о задаче показывают одно значение quota: Расчёт также может быть возвратом: для быстрой задачи преобразования текста в видео 480p длительностью 4 секунды было предварительно списано 144,000, использовано 40,594 tokens × 18.5 × 0.18 = 135,179, поэтому в записи расчёта указано −8,821 (возврат $0.02), а значение API задачи quota равно 135,179. Первый набор чисел получен из реальной задачи преобразования изображения в видео 2.0 с эталонным видео: 368,100 tokens × 14 (тарифный уровень для входного видео) × 0.18 (коэффициент группы) = 927,612, то есть $1.86. Поле other записи расчёта содержит final_quota = 927,612, original_quota = 224,999 и adjustment_quota = 702,613, поэтому все три значения видны в одной записи.

Определение фактической стоимости по статусу

Обратите внимание, что используются два разных набора терминов: эндпоинт запроса видео /seedance/api/v3/.../tasks/{id} сообщает об успехе как succeeded, тогда как API задач /api/task/self сообщает о нём как completed; не копируйте условие из кода опроса.
Суммирование quota по неуспешным задачам учитывает их предварительное списание как расход. При программной сверке фильтруйте по status; если вместо этого вы выполняете сверку через API запроса журналов, получайте и type=2, и type=11, где последнее обозначает записи возврата с отрицательным quota.

Написание параметров (в отличие от Log Query API)

Параметры пагинации API задач используют snake_case page_size, а номер страницы p начинается с 1; Log Query API использует camelCase pageSize, где p начинается с 0. Ошибка не вызывает ошибку, вы просто получите страницу по умолчанию. Проверенные фильтры: Для пакетной сверки выполняйте выборку по временному окну; каждый элемент содержит task_id, status, quota, submit_time, finish_time и model_name:

Если необходимо вручную сверить данные в журналах

Три поля в строке записи о расчёте соответствуют API задач:
  • Её временная метка (created_at) совпадает с finish_time задачи с точностью до 1 секунды
  • Её completion_tokens совпадает с usage.completion_tokens задачи
  • Её other.final_quota совпадает с quota задачи
request_id записи о предварительном списании совпадает с заголовком X-Shellapi-Request-Id ответа на отправку, поэтому запись можно найти с помощью /api/log/self?request_id=…. Обратите внимание: ответ также содержит заголовок X-Request-Id; это идентификатор запроса на стороне провайдера, который невозможно найти в журналах APIYI. Однако записи о предварительном списании совпадают при отправке нескольких задач в одну и ту же секунду, а запись о расчёте не содержит request_id, поэтому журналы подходят только для выборочной проверки отдельных задач. Для программной сверки используйте API задач.

Часто задаваемые вопросы

Сначала проверьте статус задачи. В статусе submitted / in_progress значение quota — это только предварительное списание, а вторая запись в журнале ещё не существует; при failed значение quota по-прежнему показывает предварительное списание, тогда как в журнале появилась отрицательная запись возврата, поэтому сумма двух записей равна 0. Для задач со статусом completed эти значения должны совпадать; если они не совпадают, отправьте task_id в службу поддержки.
Окончательный расчет фиксируется системой по завершении задачи, вне пути запроса шлюза, поэтому он не содержит token, группу или request_id, а консоль помечает его как «потоковая передача». Это нормально.
В /v1/videos и на других общих эндпоинтах content записи предварительного списания содержит task ID: cgt-…, но в записи окончательного расчета он по-прежнему отсутствует. Кроме того, в настоящее время эти эндпоинты не полностью передают параметр разрешения Seedance, поэтому всегда используйте задокументированный путь /seedance/api/v3/contents/generations/tasks; см. API генерации видео.
/api/task/self возвращает только задачи того аккаунта, которому принадлежит token. Предоставляйте вашему token для сверки только разрешение «Usage & personal records · Read», храните его надежно и не добавляйте в репозитории кода.

Связанные документы