Схема модели
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). |
groupLabel | Label для группировки в каталоге 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 предложения) — что умеет, на чём натренирована. |
thumbnailUrl | URL 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 от сервера.
Дальше
- Поиск по каталогу — фильтры и сортировка списка моделей.
- Оценка стоимости —
POST /models/{modelId}/estimateс реальным input-ом. - Изображения, видео, аудио — типовые рецепты по медиа.