Сотни фото товаров уже лежат в папке, а запрос на удаление фона возвращает 503 All providers failed. Модель работает — просто ссылка в поле image передана строкой, без квадратных скобок. Так было днём 22.09.2026; вечером мы это исправили, и теперь строка принимается как список из одной картинки. Ниже — весь дневник: какая ошибка осталась, в каком формате приходит прозрачный фон и сколько это стоит.
22.09.2026 я прогонял Recraft Remove Background через OpenAI-совместимый API altrouter руками, из Python и с серверным временем CEST в Нюрнберге. Модель доступна в каталоге altrouter по цене $0,0085 за картинку — это на 15% ниже официальной цены Recraft, при оплате картой РФ, СБП или криптой.
Для пробного запуска нужны регистрация и ключ в кабинете. За подтверждённый Telegram один раз начисляется $1 на тесты — этого хватает примерно на 117 удалений фона.
Откуда взялась тестовая картинка
Для проверки я взял белую керамическую кружку на светло-сером фоне. Исходник мы сами сгенерировали через Imagen 4 Fast в altrouter 22.09.2026: 1024×1024, WEBP, 13,9 секунды и $0,023.
Так у теста нет вопроса с правами на чужую фотографию. Дальше обозначаю исходную ссылку как https://…/mug.webp.
У Recraft Remove Background есть одна важная особенность: промпт не нужен вообще. Модель получает картинку и возвращает тот же объект на прозрачном фоне.
Запуск 1: без картинки
Самая первая проверка модели в тот день прошла в 13:49:51 за 3,5 секунды. После неё я начал последовательные запуски через API altrouter.
В 14:56:47 отправил минимальный запрос без image:
POST /v1/images/generations
{"model":"recraft-remove-background"}
Ответ пришёл за 0,0 секунды:
{"error":{"message":"`recraft-remove-background` works on a reference image - pass one in `image`.","type":"invalid_request_error","param":"image","code":null}}
Это HTTP 400. Запрос отбит ещё до модели, и ошибка здесь полезная: API не просит сочинить инструкцию, а прямо говорит передать изображение.
Промпт не заменяет файл. Для удаления фона единственный обязательный вход — картинка.
Запуск 2: картинка строкой — 503 (уже исправлено)
Во втором запуске я добавил ссылку, но передал её строкой:
{"model":"recraft-remove-background","image":"https://…/mug.webp"}
Время — 14:56:47. Через 0,2 секунды пришёл HTTP 503:
{"error":{"message":"All providers failed (…)","type":"service_unavailable","param":null,"code":"no_provider_available"}}
На первый взгляд сообщение отправляет искать падение у всех поставщиков. В нашем случае причина была проще: image передан строкой, а API ждёт массив.
Это был наш недочёт: текст говорил «все поставщики упали», хотя дело было в форме запроса. Вечером 22.09 мы это исправили: теперь строка в image принимается как список из одной картинки, массив работает как раньше, а любое другое значение (число, объект) получает понятный 400: «image must be a URL or a list of URLs.»

Запуск 3: массив со ссылкой — 200
Третий запрос снова ушёл в 14:56:47, но теперь ссылка оказалась внутри массива:
{"model":"recraft-remove-background","image":["https://…/mug.webp"]}
Через 5,7 секунды API вернул HTTP 200:
{"created":1790081812,"data":[{"url":"https://api.altrouter.ai/media/images/2026/09/22/80bddbe5-….webp"}]}
Ответ — WEBP 1024×1024 в режиме RGBA. Альфа-канал хранит прозрачность, поэтому фон можно положить поверх другого изображения без белого прямоугольника.
В результате 77,4% пикселей полностью прозрачные. Ещё 16% почти непрозрачные, с мягким краем, а 5,8% полностью непрозрачные.
Тень под кружкой исчезла вместе с фоном. Отверстие в ручке тоже стало прозрачным, а край предмета остался ровным.
Ссылка на готовый файл ведёт на адрес api.altrouter.ai. Для массовой обработки это означает простой маршрут: отправили изображение, получили URL результата и скачали файл своим кодом.
Запуск 4 и 5: data: URL и маленькая картинка
Ссылку на файл размещать заранее не обязательно. В 14:57:10 я отправил тот же снимок прямо в теле запроса как data: URL.
{"model":"recraft-remove-background","image":["data:image/jpeg;base64,/9j/4AAQ…"]}
Исходником был JPEG размером 45 КБ в base64. HTTP 200 пришёл за 3,0 секунды, а результат оказался PNG 1024×1024 RGBA.
Формат ответа зависит от входа. WEBP вернулся как WEBP, а JPEG — как PNG, потому что JPEG не умеет хранить прозрачность.
В 14:57:13 я повторил тест на маленькой картинке 200×200:
{"model":"recraft-remove-background","image":["data:image/jpeg;base64,…"]}
Файл весил 4 КБ. Ответ — HTTP 200 за 5,7 секунды, PNG 200×200 RGBA.
Маленький вход модель приняла, но размер не увеличила. Если после удаления фона нужен апскейл, для этого есть отдельная модель recraft-crisp-upscale.

Что это значит для вас: локальный JPEG можно закодировать в base64 и отправить без отдельного хостинга. data: URL можно передать и строкой, и внутри массива.
Сколько стоит убрать фон через API
Официальная цена Recraft API на 22.09.2026 — $0,01 за одно удаление фона. В altrouter один вызов стоит $0,0085 за картинку, то есть на 15% ниже официальной цены вендора.
Для 1000 фотографий расчёт выглядит так:
- официальная цена Recraft — $10,00;
- altrouter — $8,50;
- разница — $1,50.
Это цена именно одного удаления фона. В нашем прогоне пять вызовов дали три успешных результата по $0,0085, потому что первые два запроса были ошибочными и до обработки изображения не дошли.
Оплата доступна картой РФ, СБП или криптой. Подписки нет, оплата за каждую обработанную картинку, а стартовый $1 за подтверждённый Telegram покрывает первую сотню картинок.

Чек-лист перед массовой обработкой
Перед запуском очереди я бы проверил пять вещей.
image— ссылка илиdata:URL строкой либо массив таких строк; для пачки удобнее массив.promptпередавать не нужно.- Для PNG на выходе отправляйте PNG или JPEG. WEBP вернётся как WEBP.
- Файл должен быть меньше 10 МБ и меньше 16 Мп. Самая длинная сторона — меньше 4096 пикселей.
- Таймаут лучше ставить с запасом. В успешных запусках ответ пришёл за 3,0–5,7 секунды, а в примере ниже стоит 120 секунд.
Рабочий вариант с локальным JPEG выглядит так:
import base64, requests
KEY = "ar-..."
with open("mug.jpg", "rb") as f:
data_url = "data:image/jpeg;base64," + base64.b64encode(f.read()).decode()
r = requests.post(
"https://api.altrouter.ai/v1/images/generations",
headers={"Authorization": f"Bearer {KEY}"},
json={"model": "recraft-remove-background", "image": [data_url]},
timeout=120,
)
r.raise_for_status()
url = r.json()["data"][0]["url"]
open("mug-no-bg.png", "wb").write(requests.get(url, timeout=120).content)
Путь запуска состоит из регистрации, получения ключа в кабинете, подтверждения Telegram и отправки такого запроса. Параметры запроса описаны в документации API, а цена и статус модели — на странице Recraft Remove Background.
Если фон нужно не убрать, а заменить на другой по описанию словами, это уже задача модели редактирования. Как она ведёт себя на фото с лицом, мы разбирали в статье про FLUX.1 Kontext Pro.
Чего мы не проверяли
SVG на входе мы не проверяли. Документация Recraft указывает, что SVG должен возвращаться как SVG, но через altrouter этот сценарий в замере 22.09.2026 не прогоняли.
Файлы рядом с ограничениями 10 МБ и 4096 пикселей тоже не тестировали. Поэтому результаты для таких входов нельзя приравнивать к проверенной кружке 1024×1024.
Сложные края остались за рамками: волосы, мех, стекло и прозрачные предметы мы не брали. Наша картинка — простой случай с белым объектом на ровном сером фоне.
Скорость на сотнях файлов подряд не измеряли. Все пять вызовов прошли по одному, поэтому время 3,0–5,7 секунды описывает одиночные запросы, а не готовую производительность очереди.
Итог дня: пять вызовов, две ошибки и три готовые картинки. Обе ошибки — мои, в форме запроса, а не в модели.
Главный сбой оказался не в модели, а в форме входных данных. Теперь правило ещё проще: уберите промпт, передайте картинку в image строкой или массивом — и запрос возвращает прозрачный результат.
FAQ
Как убрать фон с фото через API?
Отправьте POST на /v1/images/generations с моделью recraft-remove-background и полем image — ссылкой или data: URL, строкой или массивом. В ответе приходит ссылка на картинку с прозрачным фоном, а в нашем замере успешные вызовы занимали 3,0–5,7 секунды.
Нужен ли промпт для удаления фона нейросетью?
Нет. Модель работает только по картинке, а без неё API отвечает 400 с подсказкой передать image.
В каком формате приходит картинка без фона?
Результат приходит с альфа-каналом, то есть с прозрачностью. На WEBP-входе вернулся WEBP, на JPEG-входе — PNG, а размер результата совпал с размером входного файла.
Сколько стоит удаление фона через API?
В altrouter удаление фона стоит $0,0085 за картинку, а официальная цена Recraft на 22.09.2026 — $0,01. Обработка 1000 фото стоит $8,50 против $10,00 по официальной цене.
Почему API возвращал 503 при удалении фона?
Днём 22.09.2026 503 All providers failed приходил, когда image был передан строкой, а не массивом. Вечером того же дня мы это исправили: строка теперь принимается, а неверный тип поля даёт 400 с подсказкой. Если 503 всё же пришёл, это реальный сбой на стороне модели — повторите запрос через 30 секунд.