Доступно

Генерация изображений: запрос, base64 и сохранение файла

Рабочий POST /v1/images/generations: image-модель, Idempotency-Key, размеры, b64_json, сохранение файла, стоимость и ошибки.

API Токенмоста работает

Базовый адрес — https://tokenmost.ru/v1. Создайте ключ в личном кабинете, выберите модель в каталоге и отправьте первый запрос. Методы, которые ещё не доступны, отмечены отдельно.

Как это устроено

Публичный Images API Токенмоста создаёт изображения по текстовому prompt и возвращает результат в data[].b64_json. Нужны Bearer-ключ с доступом к Images, положительный баланс, точный ID image-модели и уникальный Idempotency-Key. Редактирование входного изображения этим методом не поддерживается.

Что потребуется

  • Положительный доступный баланс и API-ключ с областью Images.
  • Точный ID image-модели из каталога; текстовая модель не получает поддержку изображений автоматически.
  • Достаточно памяти и места для декодирования base64 вне журналов приложения.

Порядок работы

  1. Проверьте image-модель, опубликованный тариф и доступные для неё размеры в каталоге или песочнице.
  2. Отправьте POST /v1/images/generations с model, непустым prompt, n, size и response_format: b64_json.
  3. Сохраните исходный Idempotency-Key вместе с телом. При неопределённом исходе повторяйте только ту же пару ключа и тела.
  4. Проверьте HTTP-статус, длину data и media_type. Декодируйте b64_json в бинарный файл; не записывайте base64 в журнал.
  5. Сверьте итоговую операцию и списание в кабинете. Обрабатывайте фактический массив data: результатов может быть меньше n.

Готовая конфигурация

Запрос cURL

curl "https://tokenmost.ru/v1/images/generations" \
  -H "Authorization: Bearer $TOKENMOST_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: image-demo-0001" \
  -d '{
    "model": "google/gemini-3.1-flash-image",
    "prompt": "Синий стеклянный мост над спокойной рекой, мягкий утренний свет",
    "n": 1,
    "size": "1024x1024",
    "response_format": "b64_json"
  }' > image-response.json

Сохранение PNG — Node.js

import { readFile, writeFile } from "node:fs/promises";

const response = JSON.parse(await readFile("image-response.json", "utf8"));
if (!response.data?.[0]?.b64_json) throw new Error("Изображение отсутствует");
const bytes = Buffer.from(response.data[0].b64_json, "base64");
await writeFile("result.png", bytes);
console.log({ id: response.id, bytes: bytes.length });

Сохранение файла — PowerShell

$response = Get-Content .image-response.json -Raw | ConvertFrom-Json
if (-not $response.data[0].b64_json) { throw "Изображение отсутствует" }
[IO.File]::WriteAllBytes(
  (Join-Path $PWD "result.png"),
  [Convert]::FromBase64String($response.data[0].b64_json)
)

Пример запроса

Укажите TOKENMOST_BASE_URL=https://tokenmost.ru/v1, ключ проекта и точный ID модели из каталога. Пример отправляет запрос в публичный API и может списать средства с баланса по тарифу модели.

curl "https://tokenmost.ru/v1/images/generations" \
  -H "Authorization: Bearer $TOKENMOST_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: image-example-0001" \
  -d '{
    "model": "IMAGE_MODEL_ID_FROM_CATALOG",
    "prompt": "Минималистичная иллюстрация синего моста на светлом фоне",
    "n": 1,
    "size": "1024x1024",
    "response_format": "b64_json"
  }'

Что учесть

Генерация выполняет реальный платный запрос. Начните с n: 1, поддерживаемого размера и отдельного ключа с небольшим бюджетом. Не записывайте API-ключ или b64_json в логи.

Поля запроса

model и prompt обязательны. n — целое число от 1 до 4, по умолчанию 1. Общий контракт принимает 256x256, 512x512 и 1024x1024; маршрут конкретной модели может разрешать только часть размеров и меньшее n. response_format сейчас только b64_json.

Что приходит в ответе

Ответ содержит id, created и data. В каждом элементе есть b64_json; дополнительно могут прийти revised_prompt и media_type. Допустимы PNG, JPEG, WebP и SVG. Расширение файла выбирайте по фактическому media_type, если оно передано.

Стоимость и резерв

Изображения оплачиваются по единице и тарифу модели, а не по текстовым токенам. Сервис резервирует сумму для запрошенного n и маршрута, затем фиксирует фактический результат. Не запускайте автоматические повторы с новым Idempotency-Key.

Ограничения данных

JSON-запрос ограничен 20 000 байтами, а каждый base64-результат — 16 МиБ. Base64 увеличивает объём ответа; декодируйте и удаляйте его из памяти как можно раньше. Endpoint создаёт новое изображение и не принимает входной файл.

Ошибки и диагностика

HTTP 400

Проверьте image-model ID, prompt, n=1–4, size и response_format=b64_json, затем ограничения модели.

HTTP 402

Уменьшите n либо пополните баланс или бюджет ключа.

HTTP 409

Проверьте историю и повторяйте только неизменный запрос с прежним Idempotency-Key.

HTTP 413

Сократите prompt и уберите неподдерживаемые данные; входное изображение сюда не передаётся.

HTTP 503 или неизвестный исход

Проверьте историю операции и не создавайте новый платный запрос вслепую.

Файл не открывается

Декодируйте b64_json без data-URL-префикса, проверьте media_type и не сохраняйте JSON как бинарный файл.

Источники и связанные инструкции

Читайте дальше

← Все инструкции