Skip to main content

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

Запросите API задачи по task_id; возвращаемое значение quota — это общая стоимость видео. Две записи журнала (предварительное списание + расчёт) в сумме дают эту стоимость, а значение quota в подробном представлении «Асинхронные задачи» — то же самое число.
quota ÷ 500,000 = USD. Выполните аутентификацию с помощью системного token (не ключа API sk-); информацию о его получении см. в API запросов журналов. Не пытайтесь сопоставлять записи журнала по одной через 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, а в консоли он помечен как «streaming». Это нормально.
В /v1/videos и других универсальных эндпоинтах content записи предварительного списания включает task ID: cgt-…, однако запись расчёта по-прежнему его не содержит. Кроме того, эти эндпоинты пока не полностью передают параметр разрешения Seedance, поэтому всегда используйте документированный путь /seedance/api/v3/contents/generations/tasks; см. API генерации видео.
/api/task/self возвращает только задачи аккаунта, которому принадлежит token. Системный token эквивалентен учётным данным аккаунта, поэтому защищайте его как пароль и не храните в репозиториях кода.

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