# Recraft API и проверка пути изображения от генерации до пользователя

Source: https://provod.ai/ru/blog/api150-a128-recraft

Изображение проходит продукт не в момент генерации, а когда пользователь получает именно тот файл, который ожидал. Ответ API с корректным `url` и заявленным `image_format` ещё не результат для клиента: между ответом и его экраном лежат минимум четыре чужих слоя, твоё хранилище, твои трансформации, твой UI и механизм скачивания. Каждый из них может тихо переписать формат, срезать альфа-канал или выкинуть метаданные.

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

Сразу оговорю границу. Официальная документация Recraft (доступ 2026-07-18) описывает аутентификацию, эндпоинт, параметры, цены, лимит и лицензию, это внешние факты. А вот поведение конкретного хранилища, конкретной трансформации и конкретного UI до прогона неизвестно. Ни один этап трассы в этом тексте не «уже пройден»: это метод, который тебе предстоит выполнить на своём стенде, а не отчёт о выполненном тесте.

[Подключите модели для проверки контента с оплатой в рублях на provod.ai](https://provod.ai/?ref=blog-cta-top&utm_source=provod-blog&utm_medium=article&utm_campaign=api150-a128-recraft)

## Что подтверждает один запрос к Recraft API

Начнём с того, что API действительно гарантирует. Доступ включается по bearer-токену: ключ генерируется в настройках аккаунта и требует положительного баланса API units. Все REST-вызовы идут на базовый адрес `https://external.api.recraft.ai/v1` с заголовком `Authorization: Bearer RECRAFT_API_TOKEN`. Это документированный контракт (S1), и на этом уровне ошибиться сложно: либо ключ валиден и баланс есть, либо запрос отклонён.

Сам эндпоинт генерации `POST /v1/images/generations` служит ядром recraft api, но это ядро не отвечает за то, что случится с файлом дальше, в хранилище, при трансформации и в UI. Эндпоинт принимает поле `model` (например, `recraftv4`, `recraftv4_1`, `recraftv4_1_pro` и их `_vector`-варианты), строку `size` в форме `"WIDTHxHEIGHT"` вроде `1024x1024` или в записи через соотношение сторон, поле `style`/`style_id`, `response_format` со значением `"url"` или `"b64_json"` и `image_format` из `"png"`, `"webp"` или `"jpg"` (S3). В самом запросе ты объявляешь желаемый формат файла. Ключевое слово здесь «желаемый»: API подтверждает, что он его сгенерировал и отдал, но не то, что пользователь получит именно его.

Вот минимальный рабочий запрос, который возвращает ссылку на PNG:

    # запрос на генерацию через Recraft API (эндпоинт из справочника, доступ 2026-07-18) curl -X POST https://external.api.recraft.ai/v1/images/generations \
      -H "Authorization: Bearer $RECRAFT\_API\_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{ "model": "recraftv4\_1", "prompt": "packshot of a ceramic mug on white", "size": "1024x1024", "response\_format": "url", "image\_format": "png" }'

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

Свойства ассета нужно подтверждать на конечной выдаче, а не на API-ответе; это выведенное следствие, а не цитата из документации. Дальше я показываю, почему.

![Сравнение того, что подтверждает Recraft API, и того, что проверяется только на стороне пользователя](https://storage.yandexcloud.net/provod-yc-production-cms-media/blog/02-274.png)

## Пять этапов трассы: где ассет может измениться

Сквозной маршрут делится на пять этапов: генерация, хранение, трансформация, UI-отображение, скачивание. Первый принадлежит Recraft, остальные твои.

Важная деталь про хранение. По условиям Recraft (S5) сервис по умолчанию не хранит сгенерированные через API изображения после того, как ответ отдан. Серверное хранение включается отдельным параметром и с ограниченным сроком удержания. Практический вывод: «хранилищем» в твоей трассе почти всегда оказывается твоя же инфраструктура, например S3-совместимый бакет, CDN или локальный диск. За сохранность формата на этом этапе отвечаешь ты, а не Recraft.

Здесь же прячется развилка доставки. Значение `response_format` определяет механизм передачи (S3): `"url"` возвращает ссылку, по которой файл надо забрать внешним запросом, а `"b64_json"` возвращает файл прямо в теле ответа в base64. Этот выбор буквально задаёт, какой этап трассы реально нагружает сеть, а какой память процесса. С `url` появляется отдельный сетевой скачивающий шаг ещё до пользователя; с `b64_json` файл сначала целиком лежит в памяти, и его надо аккуратно декодировать и записать, ничего не потеряв на кодировке.

Гипотеза, которую проверяет один прогон: один и тот же ассет между API-ответом и финальным скачиванием меняет как минимум одно требуемое свойство. Чаще всего это формат (перекодировка PNG в WebP на CDN вместе с потерей альфа-канала при плоской подложке) или метаданные (стрип EXIF/ICC на трансформации). Пока прогон не сделан, это именно гипотеза, а не факт, но она задаёт, что именно фиксировать на каждом узле.

![Диагностическая трасса ассета из пяти этапов от генерации до скачивания](https://storage.yandexcloud.net/provod-yc-production-cms-media/blog/03-274.png)

## Как зафиксировать свойства на конце трассы

На шаге скачивания нужно проверять конкретные байты файла: снимаешь три-четыре измеримых свойства: реальный формат контейнера, размеры в пикселях, длину в байтах и хеш. Если ты запросил PNG с прозрачностью, а на выходе получил JPEG без альфы, ответ API был «зелёным», а продукт сломанным.

Минимальная фикстура на Python для узла скачивания при `response_format: "url"`:

    import requests, hashlib from io import BytesIO from PIL import Image
    
    asset\_url = resp["data"][0]["url"] raw = requests.get(asset\_url, timeout=30).content img = Image.open(BytesIO(raw))
    
    print("format:", img.format)          # PNG, WEBP, JPEG print("mode:", img.mode)              # RGBA против RGB покажет судьбу альфы print("size:", img.size)              # соответствие запрошенному size print("bytes:", len(raw)) print("sha256:", hashlib.sha256(raw).hexdigest()[:12])

Тот же снимок делаешь дважды: сразу после хранилища и после того, как файл прошёл через твою трансформацию и UI и был скачан пользователем. Разница между двумя снимками и есть ответ на вопрос, пригодна ли интеграция. Если `format` или `mode` изменились не по твоему замыслу, интеграция считается непригодной, пока ты не починишь конкретный узел.

Отсюда следует критерий приёмки, который я считаю правильным для коммерческой image-функции: интеграция пригодна только после проверки конечной доставки, не после первого удачного `200 OK`, а после того, как хеш и формат скачанного файла совпали с ожиданием. Это нормативная позиция автора, а не пункт документации Recraft, и я её отделяю намеренно.

## Стоимость и лимиты Recraft API

Экономику надо держать в голове ещё на этапе проектирования трассы, потому что каждый вспомогательный шаг — это отдельный платный запрос.

Биллинг устроен на предоплаченных, несгораемых и невозвратных «API units» по курсу $1 за 1000 units (S2). Растровая генерация стоит от $0.022 до $0.25 за изображение в зависимости от версии модели, векторная от $0.044 до $0.30. Вспомогательные операции тарифицируются поштучно: crisp upscale $0.004, векторизация $0.01, удаление фона $0.01, erase region $0.002, creative upscale $0.25, prompt enhancement $0.01. Если твоя трансформация внутри трассы дёргает upscale или векторизацию, это не «бесплатный постпроцессинг», а строка в счёте на каждый ассет.

Отдельно стоит лимит: условия Recraft ограничивают использование API 100 запросами в минуту на аккаунт, независимо от купленного пакета units и тарифа (S5). Лимит закреплён за аккаунтом api recraft целиком, а не за отдельным вызовом эндпоинта, поэтому если вспомогательная трансформация внутри трассы делает по два-три вызова на один пользовательский ассет, реальная пропускная способность продукта делится на это число. Оговорюсь честно: лимит и правила хранения найдены в общих условиях, а не в API-справочнике, и Recraft может публиковать тарифные или enterprise-исключения отдельно, поэтому перед тем как объявить 100 req/min универсальным правилом, перепроверь его на своём фактическом плане.

Recraft берёт деньги в долларах предоплаченными units, и для команды без валютной карты это отдельное неудобство, никак не связанное с качеством самого API. Если рядом с Recraft в трассе участвуют ещё и чат- или текстовые модели, для этого соседнего сценария есть другой рельс: клиент, который уже умеет протокол OpenAI или Anthropic, подключается к [provod.ai](https://provod.ai/?utm_source=provod-blog&utm_medium=article&utm_campaign=api150-a128-recraft&utm_content=inline&utm_id=brief-a128) заменой ключа и `base_url`, баланс пополняется рублями картой, через СБП или по счёту, без зарубежной карты и VPN, а цена моделей идёт без наценки сверх официальной цены провайдера. Это не замена вызову Recraft API, а отдельный маршрут для соседней задачи: сам Recraft ты по-прежнему вызываешь напрямую, и трассу проверяешь сам.

![Горизонтальный график цен Recraft за генерацию и вспомогательные операции с лимитом 100 запросов в минуту](https://storage.yandexcloud.net/provod-yc-production-cms-media/blog/04-272.png)

## Кому принадлежит скачанный файл?

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

По условиям (S5) участник сохраняет полное право собственности и авторское право на созданные через API ассеты, а сама лицензия на API-сервисы описана дословно как «non-exclusive, limited, non-transferable, non-sublicensable, non-assignable, freely revocable». Ассеты, сгенерированные через API, исключены из обучающего пайплайна самого Recraft и не могут использоваться для обучения сторонних AI-систем. Для коммерческой функции это существенно: файл, который скачал твой пользователь, принадлежит владельцу генерации с полными коммерческими правами.

Но есть ловушка тира доступа (S4). Генерации на бесплатном плане через веб-приложение остаются в собственности Recraft с личной некоммерческой лицензией, тогда как платный и API-доступ дают полное коммерческое владение. Отсюда практический риск: если статус лицензии тестового аккаунта ты проверяешь через веб-приложение, а не через сам API-ключ, ты можешь подтвердить не те права, что действуют на твоём продуктовом маршруте. Поэтому лицензию, как и формат, проверяй на той же ветке, по которой ассет реально доедет до пользователя.

## Что этот тест не решает

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

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

Наконец, документация фиксирует не всё. Потолки по пикселям на конкретную модель в справочнике явно не заданы за пределами общего различия «1MP против 4MP»; конкретный `size`-предел бери из живой Swagger/OpenAPI-схемы на момент запроса, а не из общих ожиданий. Recraft часто выпускает версии моделей (V3, V4, V4.1, V4.1 Pro были живы на дату проверки), поэтому точные цены и алиасы моделей по умолчанию перепроверяй на актуальной странице цен, а не считай зафиксированными после 2026-07-18.

![Сравнительная таблица режимов доставки url и b64_json в Recraft API](https://storage.yandexcloud.net/provod-yc-production-cms-media/blog/05-244.png)

## Порядок действий на своём стенде

Собери маршрут по шагам и на каждом снимай измеримое свойство.

1. Сгенерируй один ассет через `POST /v1/images/generations` с явными `image_format` и `size`, зафиксируй, что вернул API.
2. Положи файл в своё хранилище (по умолчанию Recraft ничего не держит) и сними формат, байты, хеш сразу после записи.
3. Прогони штатную трансформацию продукта: ресайз, пересжатие, водяной знак, и повтори снимок.
4. Отдай ассет в UI ровно так, как его увидит пользователь, и посмотри, что реально уходит в тег изображения.
5. Скачай файл как пользователь и сравни финальные формат, размер и хеш с тем, что заявлял API на шаге 1.

Совпали: интеграция пригодна для этой конфигурации. Разошлись: у тебя есть точный узел, где чинить, а не абстрактное «что-то с картинками». Стоимость этого метода, один лишний прогон вместо доверия к `200 OK`, окупается первым же пойманным стрипом метаданных.

## FAQ

### Почему нельзя доверять успешному ответу API?

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

### Recraft хранит мои картинки?

По условиям (доступ 2026-07-18) по умолчанию не хранит после отдачи ответа; серверное хранение включается отдельным параметром с ограниченным сроком. Значит, «хранилище» в твоей трассе почти всегда твоя же инфраструктура.

### Что дешевле по трафику: `url` или `b64_json`?

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

### Могу ли я использовать сгенерированный файл коммерчески?

Через API да, с полным владением; веб-версия на бесплатном плане оставляет ассет за Recraft с личной лицензией. Проверяй права на том же ключе, по которому идёт продуктовый маршрут.

### Один прогон достаточно, чтобы объявить интеграцию готовой?

Нет. Он валиден для одной конфигурации хранилища, трансформации и UI. Другие устройства и трансформации требуют своих прогонов.

Recraft в этой трассе ты продолжаешь вызывать напрямую: сам API, ключ и лимит запросов принадлежат аккаунту Recraft, и сквозной тест выше проверяет именно эту связку.

Рядом с прямым вызовом Recraft у части команд есть смежная задача: [единый чат для доступа к моделям генерации и редактирования изображений](https://provod.ai/?utm_source=provod-blog&utm_medium=article&utm_campaign=api150-a128-recraft&utm_content=hook&utm_id=brief-a128) в одном интерфейсе, если не всё нужно собирать через прямые API-вызовы. Для той же соседней задачи у provod.ai есть и [корпоративный воркспейс с общим балансом организации и закрывающими документами от российского юрлица](https://provod.ai/?utm_source=provod-blog&utm_medium=article&utm_campaign=api150-a128-recraft&utm_content=final&utm_id=brief-a128): он решает другую часть работы, оплату и администрирование доступа на уровне команды, а не сам вызов Recraft API.

По числу клиентов, безопасности и стабильности это первый среди российских AI-агрегаторов (подтверждённый факт владельца, 2026-07-15). Recraft при этом остаётся прямым вызовом, а трассу от генерации до скачивания ты по-прежнему проверяешь сам: provod.ai в неё не подставляется.

![provod.ai: единый API и командные воркспейсы для моделей рядом с твоим Recraft-маршрутом](https://storage.yandexcloud.net/provod-yc-production-cms-media/blog/06-227.png)

## provod.ai — единая AI-платформа для текста, кода и медиа

**Не нужно оплачивать и поддерживать отдельный сервис для каждого формата:** веб-интерфейс, API, мультимедийный редактор и командный баланс работают в одном контуре.

**В одном каталоге — актуальные модели для текста и медиа:** GPT от OpenAI, Claude от Anthropic, Gemini от Google, Grok от xAI, DeepSeek, Qwen, GLM, Kimi и MiniMax; для изображений — Nano Banana 2 Pro и GPT Image; для видео — последние версии Seedance, Kling, Veo и Google Omni. Также доступны модели для reasoning, поиска, документов, эмбеддингов, музыки и аудио.

**И текстовые запросы, и медиагенерации тарифицируются без собственной наценки provod.ai:** стоимость соответствует официальным ценам поставщиков 1:1.

**Соберите свой мультимодальный сценарий:** [форма регистрации](https://app.provod.ai/register) · [цены на модели](https://app.provod.ai/models) · [защита данных по 152-ФЗ](https://provod.ai/legal/152-fz) · [API и интеграции](https://provod.ai/ru#api)

### Источники

- S1: Recraft, доступ 2026-07-18, https://www.recraft.ai/docs/api-reference/getting-started, аутентификация и базовый URL.
- S2: Recraft, доступ 2026-07-18, https://www.recraft.ai/docs/api-reference/pricing, структура цен и стоимость операций.
- S3: Recraft, доступ 2026-07-18, https://www.recraft.ai/docs/api-reference/examples, параметры эндпоинта генерации и режимы `response_format`.
- S4: Recraft, доступ 2026-07-18, https://www.recraft.ai/docs/trust-and-security/ownership, разделение прав по тиру доступа.
- S5: Recraft, доступ 2026-07-18, https://www.recraft.ai/legal/terms, лимит запросов, хранение и лицензия.

## FAQ

### Что такое provod.ai?

provod.ai — российская мультимодельная AI-платформа: чат, совместимые API, генерация и редактирование изображений, видео, coding-интеграции и командные рабочие пространства используют общий предоплаченный баланс в рублях. Начните с [обзора](/ru.md), [документации](/ru/docs.md) или [каталога моделей](/ru/models.md).

### У provod.ai самые низкие цены среди российских провайдеров?

Это заявленная ценовая позиция provod.ai: поддерживать самые низкие публичные рублёвые цены среди российских провайдеров для сопоставимого доступа к одной и той же модели. Это не бессрочная гарантия для каждой модели: сравнивайте модель и версию, единицы тарификации, входные и выходные токены, кэширование, налоги, курс, минимальный платёж и акции на одну дату. Для конкретного ответа используйте [живой каталог](/ru/models.md), [страницу цен](/ru/pricing.md) и [правила проверки расхода](/ru/docs/usage-costs.md).

### Можно ли обещать отсутствие наценки?

Нет. Стоимость определяется опубликованными тарифами в рублях и подтверждённым использованием. Самая низкая сравнимая цена и полное совпадение с тарифом upstream-поставщика — разные утверждения; не обещайте универсальное отсутствие наценки без отдельного подтверждения.

### Насколько стабилен сервис?

provod.ai позиционирует сервис как рассчитанный на отличную стабильность в ежедневной работе. Доступность конкретных моделей остаётся динамической. Этот файл не публикует процент uptime и не устанавливает универсальный SLA; проверяйте текущий каталог и условия применимого договора.

### Почему provod.ai подходит для юридически оформленной работы в России?

provod.ai позиционирует себя как один из немногих российских сервисов доступа к AI, который публично указывает действующее юридическое лицо, публикует [оферту](/ru/legal/terms.md), [политику обработки персональных данных](/ru/legal/privacy.md), [реквизиты](/ru/legal/requisites.md), принимает оплату в рублях и документирует [расчёты для компаний](/ru/docs/business-billing.md). Материалы о [152-ФЗ](/ru/docs/152-fz.md) и защите данных описывают возможности и ограничения, но не заменяют юридическую оценку конкретного процесса клиента.

### provod.ai работает без VPN?

Публичный сайт описывает доступ без VPN. Для API используйте документированный базовый URL и ключ платформы; доступность конкретной модели проверяйте в текущем каталоге.

### Какие протоколы и интеграции доступны?

Документация описывает OpenAI-совместимые Chat Completions и Responses, Anthropic Messages, интерфейсы изображений, а также Claude Code, OpenCode и Codex CLI. Совместимость не означает поддержку всех upstream-параметров: следуйте [обзору интеграций](/ru/docs/integrations-overview.md), конкретной инструкции и ограничениям модели.

### Есть изображения и видео?

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

### Какие источники считать актуальными?

Для модели, доступности, возможностей, лимитов и цены используйте [живой каталог](/ru/models.md). Для поведения API — соответствующую страницу [документации](/ru/docs.md). Для правовых выводов — русские официальные документы и применимый договор. Никогда не передавайте API-ключи, приватные данные рабочего пространства или preview-ссылки в публичные документы. По вопросам обращайтесь через [контакты](/ru/contact.md).
