spicyapiДокументация
Аккаунт и оплата
Основное содержимое

Хранение и уничтожение данных

Максимальные сроки хранения на платформе, сокращение сроков и его влияние на существующие данные, уничтожение содержимого задачи и пределы наших гарантий.

Хранение имеет два уровня. Максимальный срок платформы — публичное обязательство, а не внутренний параметр настройки. В этих пределах вы можете задать собственные, более короткие сроки и в любой момент уничтожить содержимое отдельной задачи.

Соотношение двух уровней простое: срок можно только сократить; никакая ваша настройка не увеличивает максимальный срок.

Как долго мы храним данные: максимальные сроки платформы

ДанныеМаксимальный срок платформыПосле истечения
Созданные файлы: изображения, видео и аудиоОколо 14 днейУдаляются из объектного хранилища
Медиа короткометражных фильмов: изображения сцен, видео и озвучка, созданные в проекте короткометражного фильма Spicy Studio, а также экспортированные фильмыОколо 60 днейУдаляются из объектного хранилища
Загруженные референсные изображения1 деньURI spicy:// истекает в момент expiresAt из ответа подтверждения загрузки; после этого объект удаляется
Содержимое задачи: промпты и параметры в input, ссылки на результаты в output30 днейОба поля очищаются; сама запись задачи сохраняется
Библиотека ассетов (файлы, которые вы сохранили намеренно)Пока вы их не удалитеУдаляются, когда вы удаляете ассет или владелец закрывает аккаунт; командная библиотека удаляется вместе с командой. См. Медиа
Записи задач: ID задачи, модель, состояние, сумма и время; без какого-либо содержимогоБессрочноНе удаляются: это доказательства для споров о начислениях
Журналы и события задач: переходы состояний, записи доставки вебхуковНе менее 60 дней: месячные разделы, поэтому фактически 2–3 месяцаУдаляются
Записи баланса и финансового журнала10 летСохраняются для истории аккаунта, сверки и разрешения споров; подробнее ниже
Аудиторские записи2 годаУдаляются согласно политике после проверки целостности
Открытые IP / UA в записях безопасности90 днейЗаменяются версионированными HMAC-псевдонимами; это не анонимизация
Резервные копии базы данных35 днейОбновляются по циклу; удаление в приложении не удаляет резервные копии немедленно

Первые четыре строки можно сократить с помощью четырёх отдельных сроков ниже: созданные результаты, включая медиа и данные результата, медиа короткометражных фильмов, текст промптов и загруженные файлы.

У медиа короткометражных фильмов срок больше, потому что фильм в Spicy Studio создаётся днями или неделями: сцена первой недели должна оставаться доступной при экспорте всего фильма. Это относится только к задачам, запущенным в проекте короткометражного фильма Studio. Та же модель через API, SDK или playground сохраняет предел в 14 дней, а текст промпта в любом случае — 30 дней. Остальные сроки являются обязательствами платформы или требованиями закона и не меняются вашими настройками.

Эти сроки задаются настройками сервера, а не жёстко прописанными константами

В таблице указаны действующие максимальные сроки, которые также являются значениями по умолчанию: если ничего не настраивать, поведение остаётся прежним. Операционная команда может менять их, поскольку требования разных юрисдикций меняются. Но любое такое изменение рассматривается как изменение требований соблюдения правил: эта страница и фактическое удаление должны оставаться согласованными.

Если вам нужен иной срок хранения, закреплённый в договоре, обсудите его до подписания, не делая выводов только по этой странице.

Срок действия URI загрузки не означает завершение удаления объекта

URI spicy://, возвращённый при подтверждении загрузки, действует только до expiresAt в ответе; по умолчанию это 1 день после успешного подтверждения. В этот момент URI сразу становится недопустимым для новых задач. Сам объект удаляет проход очистки; крайний резервный механизм может отставать до 24 часов, но это не продлевает срок использования URI.

Почему «около 14 дней», а не «ровно 14 дней»

Крайний механизм истечения срока — правило жизненного цикла объектного хранилища. Согласно его официальному поведению, объекты удаляются в течение 24 часов после истечения срока. Обещать ровное число дней, фактически удаляя через 14 дней плюс ещё до суток, было бы заведомо неверно, поэтому мы пишем «около».

То же относится к коротким срокам, которые вы задаёте сами. При сроке в один час очистка обычно завершается за несколько минут после его истечения, но мы всё равно пишем «около часа» или «не позднее», а не обещаем точную секунду.

Скачивайте всё, что хотите сохранить. После окончания срока выдать ссылку на скачивание нельзя, хотя запись задачи по-прежнему доступна для запроса, а движения баланса видны в истории начислений.

Четыре срока, настраиваемые отдельно

Они отвечают на четыре разных вопроса, а не на один вопрос с четырьмя настройками. Ниже приведены названия, показанные в консоли:

СрокЧто охватываетПо умолчанию: предел платформыВарианты
Готовые результатыСозданные изображения, видео, аудио и данные результатаОколо 14 дней1 час / 6 часов / 24 часа / 7 дней / 14 дней
Материалы коротких фильмовМедиа проекта короткометражного фильма Spicy Studio и экспортированные фильмыОколо 60 дней1 час / 24 часа / 7 дней / 14 дней / 30 дней / 60 дней
Текст промптовТекст запроса: промпт и текстовые поля в input30 днейКак у результатов / 1 час / 24 часа / 7 дней / 30 дней
Загруженные файлыЗагруженные вами файлы для использования в качестве референсов1 деньУдалять после завершения задачи / 1 час / 24 часа

Настройте их в разделе Хранение страницы Защита данных консоли. При принятии задачи ей назначаются собственные моменты истечения срока для результатов и промпта на основе этих настроек и заголовка ниже; они доступны в retention ответа recordInfo.

«Удалять после завершения задачи» означает, что загруженный файл удаляется, когда все использующие его задачи достигнут конечного состояния: succeeded / failed / canceled / expired. Обычно это происходит в течение минуты, а не при создании задачи, потому что файл нужен для повторной попытки. Учтите последствия заранее: для повторной генерации с тем же изображением его придётся загрузить заново, а повторная попытка задачи завершится неудачей.

Как изменение настройки влияет на существующие данные

Изменение срока не сводится к переключению «с этого момента». Некоторые изменения затрагивают уже выполненные задачи, другие — нет. Сейчас это работает так:

ИзменениеВлияние на существующие задачи и файлы
Текст промптов на 1 час или 24 часаПри следующем проходе очистки, обычно в течение нескольких минут, каждая задача, завершившаяся более суток назад, лишается текста промпта и созданных результатов и файлов, даже если для Готовые результаты всё ещё указано 14 дней. Затем то же происходит с каждой задачей через сутки после завершения, если другое правило не удалит данные раньше.
Текст промптов на 7 днейТо же самое, но с периодом 7 дней вместо суток.
Готовые результаты на более короткий срок, когда Текст промптов задан как Как у результатовТо же, что установка такого срока для Текст промптов: 7 дней затрагивают задачи старше 7 дней, а 1 час, 6 часов или 24 часа — старше суток.
Готовые результаты на более короткий срок, когда Текст промптов имеет отдельное значениеДля уже выполненных задач ничего не меняется: каждая сохраняет срок результата, назначенный при принятии. Новые задачи используют сокращённый срок.
Загруженные файлы на Удалять по завершении задачиПрименяется к файлам, существующим в момент сохранения настройки. Файлы, используемые только завершёнными задачами, удаляются примерно в течение минуты; остальные — когда завершатся использующие их задачи. Файлы, загруженные после сохранения настройки, пока сохраняют стандартный срок из ответа подтверждения загрузки.
Загруженные файлы на 1 час или 24 часаСейчас ничего не меняется: каждый загруженный файл остаётся пригодным до expiresAt из ответа подтверждения загрузки.
Любой срок на более длинныйУже удалённое не возвращается, а существующие задачи сохраняют назначенные сроки.

Почему некоторые изменения затрагивают прошлые задачи: собственные сроки задачи фиксируются при её принятии, но второй проход очистки работает с целыми днями. Он берёт настройку Текст промптов, округляет её вверх до 1, 7 или 30 дней и применяет ко всем завершённым задачам аккаунта. При очистке задачи удаляются вместе и текст промпта, и результаты.

На той же странице есть вторая карточка — Хранение содержимого задач, которая напрямую управляет очисткой по дням:

  • Выбор 1 день или 7 дней очищает текст промптов, результаты и созданные файлы каждой задачи, завершившейся более соответствующего срока назад. Очистка продолжается для каждой задачи по достижении этого возраста.
  • Включение Удалять вскоре после завершения очищает их для всех завершённых задач, включая задачи, выполненные до включения, примерно через час после завершения каждой.
  • Обе карточки используют общие настройки: сохранение одной меняет показания другой.

Скачайте нужные результаты до сокращения любого срока

Более короткий срок может удалить результаты и промпты уже выполненных задач, а удалённое содержимое нельзя восстановить. Перед сохранением консоль показывает ожидаемое количество затронутых объектов. Считайте это предупреждением, а не точным списком удаляемого.

Сначала скачайте каждый результат, который хотите сохранить, затем сократите срок. Увеличение не требует такой осторожности: оно влияет только на будущее, а уже удалённое не возвращается.

Переопределение для отдельного запроса: X-Spicy-Retention

Если вы не хотите менять настройку аккаунта, а хотите раньше удалить только одну генерацию, передайте этот заголовок при создании задачи. Значение — целое число секунд; оно относится к файлам и промпту этой задачи:

curl -X POST https://api.spicyapi.ai/api/v1/jobs/createTask \
  -H "Authorization: Bearer $SPICY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $SPICY_IDEMPOTENCY_KEY" \
  -H "X-Spicy-Retention: 3600" \
  --data "$TASK_PAYLOAD"
  • Только сокращение. Действующее значение — min(header, account setting, platform cap). Если администратор установил час для аккаунта, отдельный запрос не может вернуть 14 дней: иначе настройка аккаунта была бы лишь рекомендацией.
  • 0 допустим и означает удаление файлов сразу после достижения конечного состояния задачи.
  • Некорректное значение не вызывает отказ запроса. Отрицательное число ограничивается до 0, значение выше предела — до предела, а значение, не являющееся десятичным целым числом, игнорируется: применяется настройка аккаунта. Фактически применённое значение всегда указывается в retention ответа recordInfo. Заголовок, запрашивающий лишь более осторожное хранение, не должен ломать генерацию.
  • Какие эндпоинты учитывают заголовок. Его читают jobs/createTask и jobs/stream. jobs/retry наследует действующее значение исходной задачи и игнорирует заголовок: это вторая попытка того же действия, и возможность выбрать иной срок дала бы одной группе задач два разных срока истечения. jobs/quote не читает его, поскольку не создаёт задачу.

recordInfo возвращает retention для каждой задачи. Сам ответ createTask его не включает, поэтому запросите значение после появления задачи:

{
  "retention": {
    "outputsExpireAt": "2026-09-13T12:00:00Z",
    "promptsExpireAt": "2026-09-13T12:00:00Z",
    "source": "header"
  }
}

source показывает определивший срок уровень: header — этот запрос, account — настройка аккаунта, platform — предел платформы. Если вы передали заголовок, но получили account, настройка аккаунта уже была короче запрошенного срока.

До завершения задачи outputsExpireAt отсчитывается от принятия; при достижении конечного состояния отсчёт переносится на момент завершения с тем же интервалом. Поэтому время может сдвигаться только позже, но не раньше. Доверяйте времени в ответе, а не пересчитывайте его самостоятельно: результат трёхуровневого ограничения не всегда совпадает с ожидаемым. Помимо вашего самостоятельного уничтожения, удалить содержимое раньше этих моментов может только настройка аккаунта, затрагивающая прошлые задачи, как описано выше.

Уничтожение содержимого по запросу: POST /jobs/purge

Если вы не хотите ждать истечения срока:

  • В консоли откройте задачу в Логи и выберите Уничтожить результаты: это то же действие, что эндпоинт ниже.
  • Удалить из истории для той же задачи также очищает её промпт и результат, ставит медиафайлы в очередь на удаление и дополнительно скрывает задачу из вашего журнала. Действие доступно после завершения задачи и окончательного расчёта стоимости.

Ни одно из действий не меняет начисленную сумму и не отменяет задачу. Вызов из кода:

curl -X POST https://api.spicyapi.ai/api/v1/jobs/purge \
  -H "Authorization: Bearer $SPICY_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{"taskId": "job_01k..."}'
УдаляетсяСохраняется
Сами объекты файлов результатаФинансовые записи и суммы
Данные результата (output)Состояние задачи и время
Промпт и текст внутри inputИдентификатор модели и request_id

Ответ:

{
  "taskId": "job_01k...",
  "contentState": "purged",
  "purgedAt": "2026-09-13T12:00:00Z",
  "contentRemovedBy": "user",
  "billingRetained": true,
  "mediaDeletionPending": true
}

Несколько правил:

  • Только задачи в конечном состоянии: succeeded / failed / canceled / expired. Дождитесь завершения выполняющейся задачи: файлы ещё не получены, а частичное удаление хуже отсутствия удаления. Принятую задачу генерации нельзя отменить, поэтому пути «сначала отменить, затем уничтожить» нет.
  • Идемпотентно, без необходимости в Idempotency-Key. Эндпоинт идемпотентен по taskId: повторный вызов для уже уничтоженного содержимого всё равно возвращает 200, а purgedAt содержит время первого уничтожения, а не текущего вызова. Повтор после тайм-аута безопасен.
  • Ответ означает «запланировано», а не «уже удалено». Пока mediaDeletionPending равно true, contentState уже имеет значение purged, но фоновая очистка ещё не завершила удаление объектов; обычно она заканчивается в течение минуты. При синхронном удалении один проблемный объект задерживал бы весь запрос именно тогда, когда вам нужен однозначный ответ.
  • Ответ со значением present означает, что этот вызов ничего не удалил, например из-за обязательного сохранения данных задачи. Можно повторить позже; конкретная причина намеренно не раскрывается.
  • billingRetained всегда равно true. Это кажется избыточным, но поле выделяет главное возможное заблуждение об этом эндпоинте; подробнее ниже.

Уничтожение не является отменой и не возвращает оплату

purge затрагивает только содержимое и ничего не меняет в расчётах:

  • Окончательное начисление остаётся окончательным. Уничтожение файлов не возвращает деньги.
  • Уже освобождённый резерв неудачных или просроченных задач остаётся освобождённым; уничтожение не освобождает его второй раз.
  • Начисление по-прежнему видно на странице оплаты с суммой, временем и моделью.

Это намеренное разделение. Финансовые записи подтверждают операции для обеих сторон и хранятся по политике 10 лет; содержимое принадлежит вам и удаляется по вашему запросу. Это две категории данных, а не две стороны одного объекта.

Главное: уничтожение удаляет содержимое, но не запись о ваших расходах.

contentState: осталось ли содержимое и кто его удалил

В подробностях задачи есть contentState с тремя значениями:

ЗначениеСмыслКогда отображается
presentСодержимое ещё существуетОбычное состояние; так же следует понимать старые задачи, созданные до появления поля
expiredАвтоматически удалено по истечении срокаДействующий срок хранения истёк и прошла очистка
purgedВы уничтожили содержимоеВы вызвали jobs/purge или выбрали Уничтожить результаты

Последние два значения сопровождаются purgedAt, временем удаления содержимого, и contentRemovedBy: system для очистки, user для вашего действия.

Слово `expired` встречается в двух местах с разным смыслом

  • Состояние задачи expired: время генерации истекло, она ничего не создала.
  • contentState со значением expired: результат был создан, а затем удалён по вашим настройкам хранения.

В английском для них используется одно слово. Один ярлык «Истекло» в вашем интерфейсе смешивает две разные ситуации: в первой нужна повторная попытка, во второй никакое количество повторов не вернёт прежний результат.

Отображать purged как «истекло» неверно по той же причине: одно означает нажатие кнопки пользователем, другое — плановое действие политики. Если поменять смыслы, люди решат, что платформа потеряла их файлы.

По истечении срока очищаются поля, а не записи

Важны обе части этой фразы; одна первая часть вводит в заблуждение

Содержимое удаляется по окончании срока хранения; запись о начислении и состоянии, не содержащая самого содержимого, сохраняется бессрочно.

Только первая часть буквально верна, но создаёт неверное впечатление: исчезает содержимое input и output, а не запись задачи.

Очистка охватывает input, output, URL обратного вызова и связанное содержимое событий и обратных вызовов. Сама запись задачи сохраняется бессрочно: это единственное доказательство для спора о начислении, и её удаление нарушило бы учёт. После очистки остаются несколько сотен байт метаданных: ID задачи, модель, состояние, сумма, время и исходный ключ. Уничтожение по запросу следует тому же правилу; вы выбираете только момент.

После удаления содержимого:

  • Вы можете узнать, сколько с вас списано за месяц, какие задачи завершились неудачей и какой ключ их отправил.
  • Вы не можете узнать отправленный промпт или ключ объекта с файлом результата: с этого момента recordInfo перестаёт возвращать input и output.

Если промпты нужны дольше, сохраняйте собственную копию. Действующее обязательное сохранение приостанавливает соответствующее удаление и блокирует уничтожение по запросу; ни один механизм не может восстановить уже физически удалённый результат.

История баланса отделена от содержимого задач

Очистка input и output задачи по истечении срока или по вашему запросу не меняет пополнения, резервы, окончательные начисления, возвращённые резервы или ручные корректировки. Эти движения баланса по-прежнему можно сверять на странице оплаты в консоли. Финансовые записи хранятся десять лет и не удаляются при истечении срока или уничтожении содержимого задачи.

Если запрос доступа или удаления затрагивает данные, которые нужно сохранить для спора, расследования безопасности или по закону, в ответе мы объясним объём и причину сохранения.

Две вещи, которые мы не можем сделать

1. Выполняющая запрос модель неизбежно видит промпт открытым текстом

Генерацию выполняет выбранная вами модель, и промпт должен поступить в неё открытым текстом. Это архитектурный предел, а не настройка: сокращение срока до часа ничего здесь не меняет. Поэтому наши сроки могут обещать только как долго данные хранит сама SpicyAPI.

Что происходит с промптом после его поступления в модель, наши настройки хранения не контролируют. Если это важно для вашего случая, свяжитесь с нами до отправки чувствительных материалов.

2. Мгновенного удаления не существует

Резервное правило жизненного цикла имеет окно выполнения до 24 часов, а резервные копии базы обновляются в течение 35 дней. Заявлять, что данные исчезают отовсюду мгновенно, неверно. Мы можем взять обязательство по сроку завершения удаления, но не по его мгновенности. Именно поэтому эндпоинт уничтожения отвечает «запланировано», а не «удалено».

Задачи, затронутые спором, запросом на экспертизу или законной обязанностью предоставления отчётности, помещаются под обязательное сохранение; отсчёт срока останавливается до снятия этого требования. Пока оно действует, уничтожение по запросу не выполняется.

Это имеет приоритет над всеми цифрами и настройками выше. Это не скрытая лазейка: без такого механизма первое юридическое требование вынудило бы нарушить любое обещание хранения, а затем объяснять, почему документация обещала 14 дней. Это указано здесь, потому что является частью правил хранения.

Что можете сделать вы

  • Задайте каждому сроку действительно нужную длительность. Они независимы: не переключайте загрузки на «Удалять после завершения задачи» только из-за желания сократить хранение промптов.
  • Скачайте нужное до сокращения срока. Сокращение может затронуть уже выполненные задачи; см. последствия изменения настроек.
  • Используйте X-Spicy-Retention для отдельных чувствительных запросов. Для одной генерации не нужно перенастраивать весь аккаунт.
  • Не отправляйте лишнее. Референсные изображения и промпты — два самых чувствительных вида данных и единственные два, содержимое которых вы выбираете сами.
  • Архивируйте свои результаты самостоятельно. Они хранятся не дольше примерно 14 дней, около 60 дней для медиа короткометражных фильмов, и меньше при сокращении срока.
  • Скопируйте данные своего аккаунта. Кнопка Скачать ваши данные на странице Защита данных выдаёт JSON-файл с профилем, ролями в команде, сведениями об API-ключах без секретов, сохранёнными данными задач и финансовыми записями. Медиафайлы в него не входят: скачивайте нужные результаты отдельно.
  • Не храните URL скачивания в базе данных. Они истекают через 20 минут, и их нельзя отозвать после выдачи. Создавайте подписанную ссылку, когда она нужна; см. Медиафайлы.
  • Используйте HTTPS для URL обратного вызова. Тело содержит состояние задачи и ссылки на файлы результата; обычный HTTP открывает их любому участнику передачи.

Мы не обучаем модели на вашем содержимом

Ваши промпты, референсные изображения и результаты не попадают ни в один наш обучающий набор.

Граница этой фразы важна: она относится к нам. Мы не устанавливаем политики отдельных моделей; см. первый пункт выше.

На этой странице