Цена задачи и котировка в API
Как узнать цену задачи до запуска запросом POST /v1/quote, от чего она зависит, когда фиксируется и что происходит с TOK, если задача не удалась.
Узнайте цену до запуска
curl https://epicai.ru/v1/quote \
-H "Authorization: Bearer $EPICAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "kling", "parameters": {"scenario": "t2v", "engine": "v3", "quality": "std", "duration": 5}}'
{
"object": "quote",
"model": "kling",
"price": {"currency": "TOK", "tokens": 75000, "base": 75000, "discount": null},
"parameters": {"scenario": "t2v", "engine": "v3", "quality": "std", "duration": 5, "aspect_ratio": "16:9", "sound": false, "shots_mode": "off"}
}
Запрос принимает поля POST /v1/tasks, кроме webhook_url, то есть model, prompt, parameters, images, videos и audios. Ничего не запускается, не резервируется и не списывается. Ответ считается по тем же правилам, что и цена задачи при создании.
| Поле | Значение |
|---|---|
price.tokens | Сколько TOK стоит задача. Эту сумму epicai зарезервирует и спишет |
price.base | Цена без ценовой акции |
price.discount | Объект {"percent": 30}, если на модель действует акция вашего аккаунта, иначе null. Акция уже учтена в tokens |
parameters | Настройки в том виде, в каком их применит задача, с подставленными значениями по умолчанию |
Сочетание параметров без цены запустить нельзя. И котировка, и создание задачи отвечают на него 400 unsupported_parameters, а допустимые сочетания ищите в GET /v1/models/{id}.
Передайте то, от чего зависит цена
| Вид | От чего зависит цена | Что передать |
|---|---|---|
| Картинки, музыка | Модель и параметры, помеченные в схеме x-affects-price, например качество и размер кадра | model, parameters |
| Документы | Параметры и число карточек: чем их больше, тем дороже | model, parameters |
| Видео | Сценарий, версия, качество, длительность, звук. У части моделей ещё и длина входных видео и звука, тогда в описании модели стоит pricing.depends_on_inputs: true | model, parameters, при необходимости videos и audios |
| Озвучка | Длина текста в знаках | model, prompt с самим текстом |
| Расшифровка | Длина записи | model, audios |
Чтобы узнать цену, не обязательно держать файл под рукой. В videos и audios каждый элемент может быть длительностью в секундах (число от 0 до 36 000 или объект {"duration": 90}) либо настоящим файлом, ссылкой или данными base64. Файл epicai скачает, измерит и сразу сотрёт. В images достаточно числа картинок или списка. Расшифровка записи длиной 90 секунд:
curl https://epicai.ru/v1/quote \
-H "Authorization: Bearer $EPICAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "gpt-transcribe", "audios": [90]}'
{
"object": "quote",
"model": "gpt-transcribe",
"price": {"currency": "TOK", "tokens": 3600, "base": 3600, "discount": null},
"parameters": {"language": "ru"}
}
Озвучка считается так же, только вместо файла в prompt передаётся текст, и цена пропорциональна числу знаков.
Цена операции над готовым результатом зависит от значения task и параметров вроде качества, но не от источника. В котировке поле source можно не передавать.
Прочитайте цены в описании модели
Описание модели в GET /v1/models/{id} содержит схему параметров и примеры цен. Параметр, который меняет цену, отмечен так.
"quality": {
"type": "string",
"enum": ["std", "pro", "4k"],
"x-enum-titles": {"std": "720p", "pro": "1080p", "4k": "4K"},
"default": "std",
"x-affects-price": true
}
| Пометка схемы | Значение |
|---|---|
x-affects-price | Параметр меняет цену |
x-enum-titles | Подписи значений, как на сайте |
x-show-if | Параметр действует, только если другие параметры имеют перечисленные значения. В остальных случаях его передавать не нужно, он не попадёт и в ответ |
x-options-by | Допустимые значения зависят от значения другого параметра, например качество от версии модели. Значение вне такого списка недопустимо |
Поле pricing.examples перечисляет сочетания параметров, влияющих на цену, с цифрой tokens. В примерах цена базовая, без акции. Если цена считается не за целую задачу, поле pricing.examples_for называет единицу: «1000 знаков» у озвучки, «1 минута записи» у расшифровки, число карточек у документа. Для точной суммы под ваш запрос используйте POST /v1/quote.
Когда цена фиксируется и списывается
- При создании задачи epicai считает цену по правилам котировки и записывает её в
price.tokens. Поздняя смена каталога или акции эту задачу не затронет. - Всю сумму epicai резервирует на балансе до запуска. Резерв виден в
balance.reservedответаGET /v1/account. - Если задача завершилась успешно, списывается ровно
price.tokens, и то же число лежит вprice.charged. Доплат нет, оценки «с запасом», как у текстового чата, нет. - Если задача не удалась, резерв снимается, а
price.chargedостаётся 0. Так бывает при отказе вендора, фильтре безопасности, сбое сохранения результата и при выходе за 100 минут. - Если доступных TOK меньше цены, задача не создаётся. Ответ 402
insufficient_fundsназывает цену и доступный остаток.
Платит тот же баланс, что и в чате. Ключ личного аккаунта тратит общий баланс сайта, ключ организации Business — кошелёк организации, и в balance.source видно, откуда идёт оплата. Сверх баланса действуют лимиты организации (402 organization_limit_reached) и потолки ключа, которые проверяются по цене задачи в момент создания (429 key_day_cap_reached, 429 key_month_cap_reached). Текстовые запросы списываются иначе, по факту (Баланс и списание).
Не нашли ответ?
Посмотрите частые вопросы или напишите в поддержку.