Skip to Content
Каталог моделейСхема модели

Схема модели

GET /models/{modelId} возвращает полную карточку модели. Это источник правды о том, какие параметры модель принимает, во сколько обойдётся вызов и что за ней стоит.

Пример

curl https://api.neuroartist.ru/models/flux/dev
{ "modelId": "flux/dev", "displayName": "FLUX.1 [dev]", "category": "text-to-image", "description": "Open-weights 12B rectified flow transformer for fast, high-quality image generation.", "creditCost": 8, "discountPercent": 0, "originalPriceRub": 8.0, "priceRub": 8.0, "priceUnit": "image", "modelLab": "Some Lab", "modelFamily": "FLUX", "groupLabel": "FLUX.1", "tags": ["realism", "fast"], "thumbnailUrl": "https://s3.cloud.ru/neuroartist/thumbnails/flux-dev.webp", "publishedAt": "2026-03-12T00:00:00Z", "licenseType": "non-commercial", "schema": { "input": { }, "output": { } }, "schemaRu": { "input": { } }, "schemaFetchedAt": "2026-04-25T08:14:03Z", "createdAt": "2026-03-12T00:00:00Z", "updatedAt": "2026-04-25T08:14:03Z" }

Поля

Идентификация

ПолеОписание
modelIdПубличный alias. Используется в POST /run/{modelId} и POST /queue/{modelId}. Не меняется.
displayNameЧеловекочитаемое имя для UI.
categoryТип задачи — text-to-image, image-to-image, text-to-video, image-to-video, text-to-speech, speech-to-text, text-to-audio, …
modelLabЛаборатория-автор модели. Может быть null.
modelFamilyСемейство модели (например FLUX, Stable Diffusion).
groupLabelLabel для группировки в каталоге UI.
tagsМассив строк: realism, lora, multilingual, nsfw-safe, … Используются для поиска.

Цена

ПолеОписание
creditCostЦелое число рублей (≥ 1) — сколько списывается атомарно при submit. Источник правды для биллинга.
priceRubТочная цена за единицу, decimal. Может быть меньше 1 ₽ (например 0.05 за megapixel, 0.4 за second).
priceUnitЕдиница измерения цены: image, second, megapixel, request, 1k_chars.
originalPriceRubЦена до скидки (если discountPercent > 0).
discountPercentПроцент скидки (0–100).

creditCost — это верхняя граница списания, integer минимум 1 ₽. Если фактическая стоимость по priceRub × quantity меньше 1 ₽, спишется всё равно 1 ₽ (минимальная единица баланса).

Для моделей с динамической ценой (per-second video, per-megapixel image) реальное списание уточняется после генерации — reconciliation возвращает разницу как refund. См. Биллинг.

Точный расчёт перед запуском с реальным input — POST /models/{modelId}/estimate. В ответе будут оба значения: estimatedCostRub (то, что спишется — integer, ≥ 1) и estimatedPriceRub (точная стоимость — decimal, может быть < 1).

Schema input-а

Поле schema — это JSON Schema того, что вы передаёте в теле POST /run/{modelId}:

{ "schema": { "input": { "type": "object", "properties": { "prompt": { "type": "string", "description": "Text description of the desired image", "minLength": 1 }, "image_size": { "type": "string", "enum": ["square_hd", "square", "portrait_4_3", "portrait_16_9", "landscape_4_3", "landscape_16_9"], "default": "square_hd" }, "num_inference_steps": { "type": "integer", "minimum": 1, "maximum": 50, "default": 28 }, "guidance_scale": { "type": "number", "default": 3.5 }, "num_images": { "type": "integer", "minimum": 1, "maximum": 4, "default": 1 } }, "required": ["prompt"] }, "output": { "type": "object", "properties": { "images": { "type": "array", "items": { } }, "seed": { "type": "integer" } } } } }

Поле schemaRu — RU-overlay поверх английских title и description для UI playground в дашборде. Структура та же.

schemaFetchedAt — когда схема была последний раз обновлена. Если null — schema подгружается лениво при первом обращении к GET /models/{modelId}.

Метаданные

ПолеОписание
descriptionКраткое описание (1–2 предложения) — что умеет, на чём натренирована.
thumbnailUrlURL preview-картинки для UI.
licenseTypeЛицензия модели: commercial, non-commercial, open-source. Влияет на разрешённые use-cases.
publishedAtКогда модель добавлена в каталог.
createdAt, updatedAtКогда добавлена / обновлена в нашем каталоге.

Использовать schema программно

Schema — обычный JSON Schema, можно подсунуть в любой validator (ajv, zod, pydantic):

import Ajv from 'ajv' const model = await fetch('https://api.neuroartist.ru/models/flux/dev').then(r => r.json()) const ajv = new Ajv() const validate = ajv.compile(model.schema.input) const input = { prompt: 'hello', num_inference_steps: 100 } if (!validate(input)) console.error(validate.errors) // → maximum: должно быть ≤ 50

Это полезно, чтобы клиент валидировал input до отправки и не тратил круги до 400 от сервера.

Дальше