Auto Split API
Разделите 3D-модель на части, которые можно печатать отдельно. Meshy сам выбирает места разрезов либо режет по указанным вами частям или цветовым областям, а также может добавлять соединители. Meshy всегда укрепляет тонкие участки, оставшиеся после разреза, поэтому каждая часть печатается цельной.
По умолчанию разделённая модель не сохраняет текстуру исходной модели. Вы можете разделить текстурированную модель, поэтому вам не нужно перегенерировать её с should_texture: false. Meshy перестраивает вырезанные части и присваивает каждой из них однородный цвет вершин. Чтобы сохранить текстуру на каждой части, отправьте keep_texture: true.
Создание задачи Auto Split
Создаёт задачу Auto Split. Задача разрезает модель из предыдущей задачи на части, которые можно печатать отдельно. Она возвращает разделённую модель, где каждая часть представлена отдельным объектом в файле.
Задача выполняется в фоновом режиме. О том, сколько обычно занимает выполнение задачи, см. раздел Время обработки.
Request
# Simple request: let Meshy choose the cuts
curl https://api.meshy.ai/openapi/v1/print/split \
-X POST \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"input_task_id": "018a210d-8ba4-705c-b111-1f1776f7f578"
}'
# Advanced request: name the parts, keep the texture, add connectors, export glb and obj
curl https://api.meshy.ai/openapi/v1/print/split \
-X POST \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"input_task_id": "018a210d-8ba4-705c-b111-1f1776f7f578",
"mode": "by_parts",
"prompt": "split into the figure and the base",
"target_formats": ["glb", "obj"],
"layout": "on_plate",
"keep_texture": true,
"connectors": true,
"connector_type": "cylinder",
"connector_size": 0.4
}'
Response
{
"result": "0193bfc5-ee4f-73f8-8525-44b398884ce9"
}
Параметры
- Name
- input_task_id
- Type
- string
- Обязательный
- Description
ID задачи, модель которой нужно разделить. Задача должна иметь статус
SUCCEEDED. Подходят следующие типы задач:- Изображение в 3D
- Мульти-изображение в 3D
- Текст в 3D — задача preview или refine
- Ретекстурирование
- Ремешинг
- Конвертировать
- Изменить размер
Модель должна быть сгенерирована с помощью Meshy 6 или Meshy 7, то есть с
ai_model, установленным вmeshy-6-lite,meshy-6,meshy-7,meshy-7.1илиlatest. Модели Smart Topology (meshy-t2иmeshy-t2.5) не поддерживаются. Для задачи refine, Ретекстурирование, Ремешинг, Конвертировать или Изменить размер это правило применяется к модели, с которой задача была начата. Задача Ретекстурирование, Ремешинг, Конвертировать или Изменить размер, созданная из загруженной модели, возвращает400.Модель может содержать не более 8 000 000 граней. Модель с большим числом граней возвращает
400. В этом случае сначала запустите для неё задачу Ремешинг и отправьте вместо этого ID задачи Ремешинг.Вы можете разделить текстурированную модель. Чтобы сохранить текстуру на частях, отправьте
keep_texture: true.
- Name
- mode
- Type
- string
- по умолчанию auto
- Description
Как разделить модель на части.
Доступные значения:
auto: Meshy сама выбирает разрезы и игнорируетprompt.promptдлиной более 600 символов всё равно вернёт400.by_parts: Meshy выполняет разрезы вдоль структурных частей, которые вы указываете вprompt, например голова, руки и торс.by_color: Meshy выполняет разрезы вдоль цветовых областей, которые вы указываете вprompt. Meshy находит эти области в исходном изображении, а не в текстуре входной модели. Входные данные должны быть сгенерированы из загруженного изображения с помощью Изображение в 3D или Мульти-изображение в 3D. Другие входные данные возвращают400. Для Мульти-изображение в 3D Meshy использует первое исходное изображение.
mode = by_parts or by_color- Name
- prompt
- Type
- string
- Обязательный
- Description
Части, на которые нужно разделить модель, на любом языке, до 600 символов. Более длинный текст возвращает
400, даже еслиmode—auto.Meshy считывает из prompt от 1 до 10 названий частей, поэтому называйте части, а не описывайте модель. Например,
split into the figure and the baseилиhead, torso, left arm, right arm, legs. Можно указать всего одну часть. Всё, что вы не назвали, становится ещё одной частью, поэтомуthe headразделит модель на голову и остальное, как в веб-приложении.Prompt, который просит не делить модель или называет более 10 частей, возвращает
400, и Meshy не списывает плату за такой запрос.Если Meshy не может считать из prompt ни одного названия части, она использует вместо этого референсное изображение модели. Она выполняет разрезы вдоль найденных там частей в выбранном вами mode. Задача всё равно выполняется, Meshy списывает за неё плату, и задача получает
prompt_ignored: true. Если у модели нет референсного изображения или Meshy находит в нём менее 2 частей, запрос возвращает400, и Meshy не списывает за него плату.
- Name
- target_formats
- Type
- array
- по умолчанию ["glb"]
- Description
Форматы файлов для генерации. Meshy всегда генерирует
glbи возвращает его вmodel_urls, плюс остальные перечисленные вами форматы.Доступные значения:
glbobjfbxstlusdzblend3mf
Каждый формат, кроме
stl, поддерживает объекты сцены и хранит каждую часть как отдельный объект. Файл STL не может содержать отдельные объекты, поэтому Meshy объединяет части в единое твёрдое тело, расположенное согласноlayout. Чтобы получить части, которые можно выбирать отдельно в слайсере, запрашивайте3mf.При
keep_texture: trueэти форматы сохраняют текстуру:glb,fbx,usdzиblend: текстура находится внутри файла.obj: текстура находится в файле материала, которыйmodel_urlsвозвращает под ключомmtl.stlи3mf: файл содержит только геометрию, без текстуры.
- Name
- layout
- Type
- string
- по умолчанию assembled
- Description
Как Meshy располагает части, во всех форматах файлов и на миниатюре.
Доступные значения:
assembled: Meshy сохраняет расположение частей таким же, как в исходной модели.on_plate: Meshy раскладывает части плашмя и распределяет их по рабочей платформе, готовыми к нарезке. Это та же компоновка, что и в режиме On Plate в веб-приложении.
В обоих вариантах layout Meshy перед экспортом удаляет любые схлопнувшиеся обрезки или точечные фрагменты, оставшиеся после разреза, так что каждая полученная вами часть пригодна для печати. Форматы, поддерживающие объекты сцены, хранят по одному объекту на часть, а
stlобъединяет части в единое твёрдое тело.
- Name
- keep_texture
- Type
- boolean
- по умолчанию false
- Description
Сохранять ли текстуру входной модели на частях.
trueпридаёт каждой части текстуру входной модели, и задача возвращает карты текстур вtexture_urls.falseпридаёт каждой части сплошной цвет вершин.При
trueзадача выполняется примерно вдвое дольше, а стоимость в кредитах не меняется. Нетекстурированная входная модель разделяется так же, как и приfalse. Если Meshy не может сохранить текстуру, задача завершается с ошибкойtextured_split_refused. См. Ошибки.
- Name
- connectors
- Type
- boolean
- по умолчанию false
- Description
Добавлять ли в каждом месте разреза шиповые соединители, чтобы напечатанные части совмещались друг с другом.
connectors = true- Name
- connector_type
- Type
- string
- по умолчанию cube
- Description
Форма соединителя на каждой поверхности разреза:
cubeилиcylinder.
- Name
- connector_size
- Type
- number
- по умолчанию 0.5
- Description
Размер соединителя относительно поверхности разреза, от
0.1до0.8. Значение вне этого диапазона возвращает400, даже еслиconnectorsравноfalse.
- Name
- connector_height
- Type
- number
- по умолчанию 0.1
- Description
Насколько соединитель выступает за поверхность разреза, относительно поверхности разреза, от
0.1до0.8. Значение вне этого диапазона возвращает400, даже еслиconnectorsравноfalse.
Возвращаемое значение
Поле result ответа содержит ID новой задачи Auto Split.
Сценарии сбоев
- Name
400 - Bad Request- Description
Запрос не может быть выполнен. Сообщение об ошибке указывает, какая проблема обнаружена. Например:
- Отсутствует prompt:
mode—by_partsилиby_color, аpromptотсутствует. - Prompt не описывает разделение или называет слишком много частей: prompt просит оставить модель цельной или называет более 10 частей.
by_partsиby_colorпринимают от 1 до 10 названных частей. Meshy не списывает плату за такой запрос. - Неподдерживаемая входная задача:
input_task_idне является успешно завершённой задачей поддерживаемого типа, сгенерированной с помощью Meshy 6 или Meshy 7. - Нет референсного изображения:
mode—by_color, а входные данные не были сгенерированы из загруженного изображения. - Соединитель вне диапазона:
connector_sizeилиconnector_heightвыходит за пределы диапазона0.1–0.8.
Исправьте запрос и отправьте его снова. См. Ошибки.
- Отсутствует prompt:
- Name
401 - Unauthorized- Description
API-ключ отсутствует или недействителен. Проверьте заголовок
Authorization.
- Name
402 - Payment Required- Description
Например:
- Недостаточно кредитов: на счёте недостаточно кредитов для этой задачи, или достигнут лимит кредитов. Проверьте баланс кредитов и повторите попытку.
- Бесплатный план: для создания задачи требуется платный план. Обновите свой план в настройках подписки, затем повторите попытку.
- Name
403 - Forbidden- Description
Применимо одно из следующего:
- Модерация контента заблокировала prompt. Сообщение —
explicit contentилиprohibited content. Измените prompt и повторите попытку. input_task_id— это модель барельефа, которую этот эндпоинт не может разделить. Сообщение —This model type does not support this operation. Отправьте другую модель.
- Модерация контента заблокировала prompt. Сообщение —
- Name
404 - Not Found- Description
input_task_idне существует или не принадлежит вашему аккаунту. Проверьте ID и используйте API-ключ от аккаунта, создавшего задачу.
- Name
429 - Too Many Requests- Description
Вы превысили ограничение частоты запросов. Подождите и повторите попытку. См. Ограничения частоты.
Запросы
by_partsиby_colorтакже используют общий лимит на чтение prompt — 12 запросов в минуту на аккаунт.
- Name
503 - Service Unavailable- Description
Разделение по prompt (
by_partsиby_color) временно недоступно. Повторите попытку позже или отправьтеmode: "auto", которое по-прежнему работает. Meshy не списывает плату за такой запрос.
Получить задачу Auto Split
Возвращает задачу Auto Split по её ID.
Request
curl https://api.meshy.ai/openapi/v1/print/split/a43b5c6d-7e8f-901a-234b-567c890d1e2f \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response
{
"id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
"type": "print-split",
"model_urls": {
"glb": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.glb?Expires=***",
"obj": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.obj?Expires=***",
"mtl": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.mtl?Expires=***"
},
"thumbnail_url": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/preview.png?Expires=***",
"texture_urls": [
{
"base_color": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/texture_0.png?Expires=***",
"metallic": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/texture_0_metallic.png?Expires=***",
"normal": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/texture_0_normal.png?Expires=***",
"roughness": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/texture_0_roughness.png?Expires=***"
}
],
"part_count": 4,
"progress": 100,
"status": "SUCCEEDED",
"created_at": 1699999999000,
"started_at": 1700000000000,
"finished_at": 1700000082000,
"task_error": null,
"consumed_credits": 10
}
Параметры
- Name
- id
- Type
- path
- Description
ID задачи из ответа на создание.
Возвращает
Удаление задачи Auto Split
Безвозвратно удаляет задачу Auto Split, включая её модели и данные. Отменить удаление нельзя.
Request
curl --request DELETE \
--url https://api.meshy.ai/openapi/v1/print/split/a43b5c6d-7e8f-901a-234b-567c890d1e2f \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response
// 200 OK on success, with an empty body.
//
// 409 Conflict when the task is IN_PROGRESS. The task keeps running:
{
"message": "Task is IN_PROGRESS and cannot be deleted. Credits for a task the worker has already started are not refundable; wait for it to reach SUCCEEDED, FAILED or CANCELED, then delete it."
}
Параметры пути
- Name
- id
- Type
- path
- Description
ID задачи, которую нужно удалить.
Статус задачи
Удаление задачи со статусом PENDING возвращает кредиты, потраченные при её создании.
Задачу со статусом IN_PROGRESS удалить нельзя. Запрос вернёт 409 Conflict,
а задача продолжит выполняться. Meshy не возвращает кредиты за задачу, которая уже
начала выполняться, поэтому удаление такой задачи означало бы потерю и кредитов, и результата.
Дождитесь, пока она перейдёт в статус SUCCEEDED, FAILED или CANCELED, и только тогда удаляйте её.
Удаление задачи в финальном статусе (SUCCEEDED, FAILED или CANCELED)
не возвращает её кредиты.
Возвращает
200 OK, когда задача удалена, или 409 Conflict, когда задача имеет статус
IN_PROGRESS.
Список задач Auto Split
Возвращает список ваших задач Auto Split.
Request
curl https://api.meshy.ai/openapi/v1/print/split?page_size=10 \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response
[
{
"id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
"type": "print-split",
"model_urls": {
"glb": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.glb?Expires=***"
},
"thumbnail_url": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/preview.png?Expires=***",
"part_count": 4,
"progress": 100,
"status": "SUCCEEDED",
"preceding_tasks": 0,
"created_at": 1699999999000,
"started_at": 1700000000000,
"finished_at": 1700000082000,
"task_error": null,
"consumed_credits": 10
}
]
Параметры
- Name
- page_num
- Type
- integer
- Description
Номер страницы для возврата. Начинается с
1, значение по умолчанию —1.
- Name
- page_size
- Type
- integer
- Description
Количество задач на странице, до
100. По умолчанию —10. Meshy рассматривает большее значение как100.
- Name
- sort_by
- Type
- string
- Description
Порядок сортировки.
Доступные значения:
+created_at: сначала старые-created_at: сначала новые
Возвращаемое значение
Постраничный список объектов задачи Auto Split.
Стриминг задачи Auto Split
Передаёт обновления задачи Auto Split в виде Server-Sent Events (SSE).
Request
curl -N https://api.meshy.ai/openapi/v1/print/split/a43b5c6d-7e8f-901a-234b-567c890d1e2f/stream \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response Stream
// Error event example
event: error
data: {
"status_code": 404,
"message": "Task not found"
}
// Message event examples illustrate task progress (other task fields omitted here for brevity;
// each frame is the full task object).
event: message
data: {
"id": "a43b5c6d-7e8f-901a-234b-567c890d1e2f",
"progress": 0,
"status": "PENDING"
}
event: message
data: {
"id": "a43b5c6d-7e8f-901a-234b-567c890d1e2f",
"type": "print-split",
"model_urls": {
"glb": "https://assets.meshy.ai/***/tasks/a43b5c6d-7e8f-901a-234b-567c890d1e2f/output/model.glb?Expires=***"
},
"thumbnail_url": "https://assets.meshy.ai/***/tasks/a43b5c6d-7e8f-901a-234b-567c890d1e2f/output/preview.png?Expires=***",
"part_count": 4,
"progress": 100,
"status": "SUCCEEDED",
"preceding_tasks": 0,
"created_at": 1699999999000,
"started_at": 1700000000000,
"finished_at": 1700000082000,
"task_error": null,
"consumed_credits": 10
}
Параметры
- Name
- id
- Type
- path
- Description
ID задачи из ответа на создание.
Возвращает
Поток объектов задачи Auto Split в виде Server-Sent Events.
Каждое событие message содержит полный объект задачи — тот же, что возвращает Получение задачи Auto Split. Он включает consumed_credits, временные метки и prompt_ignored. Пока задача находится в статусе PENDING или IN_PROGRESS, между событиями изменяются поля progress, status, started_at и preceding_tasks. Поля model_urls и thumbnail_url получают значения, а part_count появляется, когда задача достигает статуса SUCCEEDED.
Событие error содержит только status_code и message, поэтому перед чтением status проверяйте имя события.
Объект задачи Auto Split
Объект задачи Auto Split описывает одно разбиение 3D-модели. Он содержит статус, progress и файлы частей, когда задача завершается успешно.
Он не включает поля prompt других объектов задач, такие как name, object_prompt и texture_prompt. У него также нет единого model_url. thumbnail_url, model_urls и временные метки заполняются по мере выполнения задачи. Они присутствуют всегда и остаются пустыми, пока не получат значение.
The Auto Split Task Object
{
"id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
"type": "print-split",
"model_urls": {
"glb": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.glb?Expires=***",
"obj": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.obj?Expires=***",
"mtl": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.mtl?Expires=***"
},
"thumbnail_url": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/preview.png?Expires=***",
"texture_urls": [
{
"base_color": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/texture_0.png?Expires=***",
"metallic": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/texture_0_metallic.png?Expires=***",
"normal": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/texture_0_normal.png?Expires=***",
"roughness": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/texture_0_roughness.png?Expires=***"
}
],
"part_count": 4,
"progress": 100,
"status": "SUCCEEDED",
"preceding_tasks": 0,
"created_at": 1699999999000,
"started_at": 1700000000000,
"finished_at": 1700000082000,
"task_error": null,
"consumed_credits": 10
}
- Name
- id
- Type
- string
- Description
ID задачи. Рассматривайте его как непрозрачную строку и не полагайтесь на её формат.
- Name
- type
- Type
- string
- Description
Тип задачи, всегда
print-split.
- Name
- model_urls
- Type
- object
- Description
URL-адреса для скачивания разбитой модели, по одному на каждый запрошенный формат. Для формата, который вы не запрашивали, ключ отсутствует. Форматы, поддерживающие объекты сцены, сохраняют каждую часть как отдельный объект, а
stlобъединяет части в одно монолитное тело.- Name
glb- Type
- string
- Description
Файл GLB.
- Name
obj- Type
- string
- Description
Файл OBJ.
- Name
mtl- Type
- string
- Description
Файл MTL. Присутствует вместе с файлом OBJ, когда
keep_textureравноtrue, а входная модель текстурирована.
- Name
fbx- Type
- string
- Description
Файл FBX.
- Name
stl- Type
- string
- Description
Файл STL, в котором все части объединены в одно монолитное тело. Чтобы получить части, которые можно выбирать отдельно, запросите
3mf.
- Name
usdz- Type
- string
- Description
Файл USDZ.
- Name
blend- Type
- string
- Description
Файл Blender.
- Name
3mf- Type
- string
- Description
Файл 3MF.
- Name
- thumbnail_url
- Type
- string
- Description
URL-адрес для скачивания превью разбитой модели в запрошенной вами
layout. Если части сохраняют текстуру, превью показывает её. В противном случае у каждой части свой цвет.
- Name
- texture_urls
- Type
- array
- Description
Карты текстур разбитой модели в виде массива с одним объектом. Все части используют эти карты совместно. Присутствует только когда
keep_textureравноtrue, а входная модель текстурирована.- Name
base_color- Type
- string
- Description
URL-адрес для скачивания карты базового цвета.
- Name
metallic- Type
- string
- Description
URL-адрес для скачивания карты металличности. Отсутствует, если у входной модели нет карты металличности.
- Name
normal- Type
- string
- Description
URL-адрес для скачивания карты нормалей. Отсутствует, если у входной модели нет карты нормалей.
- Name
roughness- Type
- string
- Description
URL-адрес для скачивания карты шероховатости. Отсутствует, если у входной модели нет карты шероховатости.
- Name
- alpha_thumbnail_url
- Type
- string
- Description
URL-адрес для скачивания версии
thumbnail_urlс прозрачным фоном (RGBA). Присутствует только после успешного завершения задачи, когда Meshy отрендерил прозрачное превью.
- Name
- prompt_ignored
- Type
- boolean
- Description
Игнорировал ли Meshy prompt. Значение
true, когдаpromptзапросаby_partsилиby_colorне называл ни одной части, поэтому Meshy разбил модель автоматически. В этом случае названия частей в результате принадлежат Meshy, а не вам. Присутствует начиная со статусаPENDING. Meshy опускает это поле для задачautoи всякий раз, когда следовал prompt.
- Name
- part_count
- Type
- integer
- Description
Количество печатаемых частей, полученных в результате разбиения. Форматы, поддерживающие объекты сцены, содержат один объект на часть.
stlобъединяет части в одно монолитное тело, ноpart_countвсё равно их учитывает. Перед экспортом Meshy удаляет схлопнувшиеся осколки, которые не могут стать печатаемой частью, и не учитывает их.
- Name
- progress
- Type
- integer
- Description
Какая часть задачи выполнена, в процентах. Значение равно
0, пока задача не началась, и100, когда она завершена успешно.
- Name
- status
- Type
- string
- Description
Статус задачи, один из:
PENDING,IN_PROGRESS,SUCCEEDED,FAILEDилиCANCELED.
- Name
- preceding_tasks
- Type
- integer
- Description
Количество задач перед этой в очереди. Значение имеет смысл только пока задача находится в статусе
PENDING.
- Name
- created_at
- Type
- timestamp
- Description
Время создания задачи, в миллисекундах Unix.
- Name
- started_at
- Type
- timestamp
- Description
Время начала выполнения задачи, в миллисекундах Unix. Равно
0, пока задача не началась.
- Name
- finished_at
- Type
- timestamp
- Description
Время завершения задачи, в миллисекундах Unix. Равно
0, пока задача не завершена.
- Name
- expires_at
- Type
- timestamp
- Description
Время истечения срока действия результата задачи, в миллисекундах Unix. Равно
0, пока задача не завершена.
- Name
- task_error
- Type
- object
- Description
Детали ошибки при неудачном завершении задачи. См. Ошибки.
Если проверка безопасности отклоняет входную модель, задача завершается неудачей со значением
task_error.type, равнымinvalid_input, иtask_error.code, равнымprovider_content_refused. Отправьте другую модель. См. Ошибки.При
keep_texture: true, если Meshy не может сохранить текстуру, задача завершается неудачей со значениемtask_error.code, равнымtextured_split_refused. См. Ошибки.
- Name
- consumed_credits
- Type
- integer
- Description
Количество кредитов, использованных задачей. Поле присутствует всегда. Равно
10после того, как Meshy принял задачу, и0для задачи со статусомFAILED, поскольку Meshy возвращает кредиты, если задача завершается неудачей. Удаление задачи со статусомPENDINGтакже возвращает кредиты.