Ideal House
Перейти к содержанию

Документация API генерации планов домов#

Базовый URL: https://api.ideal.house
Версия: v1
Обновлено: 2026-06-12


📖 Обзор#

API генерации планов домов создаёт с помощью ИИ презентационный лист проекта дома на основе архитектурного стиля, площади, конструктивных параметров и пожеланий по планировке интерьера. При успешной генерации API возвращает ровно 1 составное изображение результата на задачу. На одном презентационном листе объединены согласованные 2D-планы этажей, чертежи фасадов и фотореалистичные визуализации экстерьера. Результат сохраняется в output.resultUrl и также включается как единственный элемент в output.resultList. Процесс асинхронный и состоит из двух шагов:

  1. Создание задачи — Отправьте параметры плана дома и получите taskId.
  2. Опрос результатов — Используйте taskId для запроса статуса задачи и получения сгенерированных изображений.

🔐 Аутентификация#

Все запросы API должны проходить аутентификацию с помощью ключа API.

Укажите ваш ключ API в заголовке запроса:

ЗаголовокЗначение
APIKEYyour_api_key_here

⚠️ Держите ваш ключ API в тайне. Не публикуйте его в клиентском коде или публичных репозиториях.


💰 Списание кредитов#

[!WARNING] 🪙 При успешном создании задачи кредиты списываются в зависимости от выбранного modelType. Если задача в итоге завершится ошибкой, списанные кредиты будут автоматически возвращены на ваш аккаунт.
При недостатке кредитов возвращается код ошибки 9051. 📄 См. Справочник по списанию кредитов.

Модель (modelType)Списанные кредиты
Base10 кредитов
Pro20 кредитов

📌 Конечные точки API#


1. Создание задачи генерации плана дома#

Создает новую задачу генерации плана дома с помощью ИИ и возвращает уникальный taskId для опроса.

Конечная точка

Обычный текст
POST /api/v1/housePlan/generate

Заголовки запроса

ЗаголовокОбязательныйОписание
APIKEY✅ ДаВаш ключ аутентификации API
Content-Type✅ Даapplication/json

Тело запроса

ПолеТипОбязательноеОписаниеПо умолчанию
stylestring / null✅ ДаАнглийское название архитектурного стиля. См. Варианты стилейBarndominium
storiesstring✅ ДаКоличество этажей. Перечисление: 1, 2, 3+2
bedroomsstring✅ ДаКоличество спален. Перечисление: 1, 2, 3, 4, 5+2
bathroomsstring✅ ДаКоличество ванных комнат. Перечисление: 1, 1.5, 2, 2.5, 3, 3.5, 4+1
totalAreastring✅ ДаДиапазон общей площади в формате min-max unit. См. Варианты общей площади150-200 m²
garageEnabledboolean✅ ДаВключать гараж или нетfalse
garageTypestring / null⚠️ УсловноеОбязательно, если garageEnabled=true. См. Варианты типа гаражаnull
garageCapacitystring / null⚠️ УсловноеОбязательно, если garageEnabled=true. См. Вместимость гаражаnull
basementstring✅ ДаТип подвала. См. Варианты подвалаNone
roofTypestring / null❌ НетТип конструкции крыши. См. Варианты типа крышиnull
outdoorSpacesarray<string>❌ НетВнешние зоны. См. Варианты внешних зон[]
layoutConceptstring / null❌ НетОбщая концепция планировки интерьера. См. Варианты концепции планировкиnull
bedroomAreaRangesarray<object>✅ ДаДиапазоны площади спален. Длина должна соответствовать количеству спален. См. Диапазоны площади спаленСм. пример
bathroomLayoutsarray<object>✅ ДаВыбор планировки ванных комнат. Длина должна быть равна Math.floor(bathrooms). См. Планировки ванных комнатСм. пример
kitchenLayoutstring / null❌ НетПланировка кухни. См. Варианты кухниnull
kitchenFeatureOptionsarray<string>❌ НетНеобязательные особенности кухни. См. Варианты кухни[]
keyRoomsstring / null❌ НетСпециальные комнаты, разделенные запятой и пробелом. См. Варианты ключевых комнатnull
promptstring❌ НетПользовательский текстовый промпт для дополнительного управления генерацией""
refImageUrlstring❌ НетURL референсного изображения дома для управления стилем""
modelTypestring✅ ДаТип качества модели. Перечисление: Base, Pro. ⚠️ Режим Flash не поддерживаетсяBase

🖼️ Требования к изображению: Необязательное изображение-образец должно быть в формате JPG/JPEG, PNG или WebP. Размер файла не должен превышать 20 МБ, а размеры изображения должны находиться в пределах от 128 × 128 px до 6,000 × 6,000 px (включительно). Перед обработкой изображения, превышающие максимальные размеры в пикселях, автоматически уменьшаются с сохранением пропорций до пределов 6,000 × 6,000 px. Изображение по указанному URL должно быть напрямую доступно серверу API.


🎨 Варианты стиля#

ЗначениеОписание
BarndominiumПо умолчанию. Гибридный дом в стиле металлического амбара
CabinСтиль деревенского деревянного домика
Cape CodКлассический симметричный стиль Новой Англии
CoastalСветлый, воздушный стиль, вдохновлённый морским побережьем
ColonialТрадиционная симметричная колониальная архитектура
ContemporaryЧистые линии и современные материалы
CraftsmanДетали ручной работы из натуральных материалов
FarmhouseДеревенский стиль фермерского дома
French CountryИзящный французский провинциальный стиль
MediterraneanШтукатурка тёплых оттенков с терракотовыми элементами
Mid-Century Modern1950-е–70-е годы: чистый геометрический модернизм
ModernМинималистичный плоский/угловой современный дизайн
RanchОдноэтажная просторная планировка
Shingle StyleСплошная отделка фасада деревянной дранкой
SouthwesternПустынный стиль, вдохновлённый саманной архитектурой
TransitionalСочетание традиционного и современного
TudorСредневековый английский стиль с фахверком
VictorianОрнаментальный декоративный стиль 19-го века

📐 Варианты общей площади#

Поле totalArea использует формат min-max unit. В метрической системе используется , в британской — ft². Минимальное значение должно быть меньше максимального как минимум на один шаг.

ЕдиницаМинимумМаксимумШагПример
5050010150-200 m²
ft²50050001001500-2000 ft²

🏠 Варианты типа крыши#

ЗначениеОписание
Gable roofКлассическая треугольная двускатная крыша
Hip roofСкаты со всех четырёх сторон
Flat roofПлоская крыша с минимальным уклоном
Pitched roofКрыша с крутыми скатами

🏗️ Варианты подвала#

ЗначениеОписание
NoneБез подвала
PartialПодвал под частью дома
FullПодвал под всем домом

🚗 Варианты типа гаража#

garageType требуется только при garageEnabled=true; в противном случае отправьте null.

ЗначениеОписание
DetachedОтдельно стоящий гараж
Front EntryВъезд в гараж со стороны переднего фасада
Side EntryВъезд в гараж сбоку
Rear EntryВъезд в гараж со стороны заднего фасада

🚗 Вместимость гаража#

garageCapacity требуется только при garageEnabled=true; в противном случае отправьте null.

ЗначениеОписание
1Одноместный гараж
2Двухместный гараж
3+Три или более машино-мест

🌿 Варианты внешних зон#

Поле outdoorSpaces принимает массив следующих значений.

ЗначениеОписание
Front porchКрытая входная веранда спереди
Covered patioКрытая внешняя терраса
DeckТерраса с деревянным или композитным настилом
BalconyПриподнятая внешняя платформа
CourtyardЗакрытый или полузакрытый внешний двор
BreezewayКрытый проход, соединяющий постройки
Outdoor KitchenЗона приготовления и приёма пищи на открытом воздухе

Пример

Обычный текст
"outdoorSpaces": ["Front porch", "Deck", "Balcony"]

🏛️ Варианты концепции планировки#

ЗначениеОписание
Open ConceptОткрытая планировка со связанными жилыми зонами
TraditionalРазделенные комнаты с четко определенными границами
Split-LevelСмещенные уровни этажей между зонами

🛏️ Диапазоны площади спален#

Поле bedroomAreaRanges должно быть массивом, длина которого соответствует количеству bedrooms. Каждый элемент использует следующую структуру:

ПолеТипОписание
namestringОтображаемое название спальни, например Room 1 (Master)
minAreastringМинимальная площадь спальни. Должна быть неотрицательной числовой строкой
maxAreastringМаксимальная площадь спальни. Должна быть больше или равна minArea
unitstringЕдиница площади. Перечисление: , ft²

Пример по умолчанию для bedrooms="2"

json
[
  { "name": "Room 1 (Master)", "minArea": "12", "maxArea": "18", "unit": "m²" },
  { "name": "Room 2", "minArea": "10", "maxArea": "14", "unit": "m²" }
]

🛁 Планировки ванных комнат#

Поле bathroomLayouts должно быть массивом длиной Math.floor(bathrooms). Например, при bathrooms="2.5" нужно передать 2 объекта планировки санузлов.

ПолеТипОписание
namestringОтображаемое название ванной комнаты, например Bathroom 1
layoutstring / nullПеречисление: With Wet & Dry Separation, Without Separation или null

Пример по умолчанию для bathrooms="1"

json
[
  { "name": "Bathroom 1", "layout": null }
]

🍳 Варианты кухни#

Планировка кухни

ЗначениеОписание
Open KitchenОткрытая кухня, соединенная с гостиной/столовой
Closed KitchenЗакрытое отдельное кухонное пространство

Варианты особенностей кухни

ЗначениеОписание
Eating BarБарная стойка / сидения у столешницы
Kitchen IslandКухонный остров
Breakfast NookУгловая зона для завтраков

🚪 Варианты ключевых комнат#

Поле keyRooms принимает одно или несколько следующих значений. При выборе нескольких вариантов соединяйте их запятой (,).

ЗначениеОписание
Home OfficeОтдельный домашний офис или рабочий кабинет
Bonus RoomДополнительная комната, которую можно использовать для разных целей
Media RoomДомашний кинотеатр или медиацентр
MudroomПрихожая для хранения верхней одежды, обуви и уличного снаряжения
Laundry RoomВыделенное прачечное помещение
Guest SuiteАвтономный гостевой блок со спальней

Пример

Обычный текст
"keyRooms": "Home Office, Media Room, Guest Suite"

Типы моделей

ЗначениеОписание
BaseПо умолчанию. Баланс скорости и качества. Генерирует составной презентационный лист высокого разрешения
ProБолее высокое качество и разрешение вывода, медленнее

⚠️ Примечание: Режим Flash недоступен для этого API. Поддерживаются только Base и Pro.


📥 Примеры запросов#

cURL
bash
# Basic request with default values
curl -X POST "https://api.ideal.house/api/v1/housePlan/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "style": "Barndominium",
    "stories": "2",
    "bedrooms": "2",
    "bathrooms": "1",
    "totalArea": "150-200 m²",
    "garageEnabled": false,
    "garageType": null,
    "garageCapacity": null,
    "basement": "None",
    "roofType": null,
    "outdoorSpaces": [],
    "layoutConcept": null,
    "bedroomAreaRanges": [
      { "name": "Room 1 (Master)", "minArea": "12", "maxArea": "18", "unit": "m²" },
      { "name": "Room 2", "minArea": "10", "maxArea": "14", "unit": "m²" }
    ],
    "bathroomLayouts": [
      { "name": "Bathroom 1", "layout": null }
    ],
    "kitchenLayout": null,
    "kitchenFeatureOptions": [],
    "keyRooms": null,
    "prompt": "",
    "refImageUrl": "",
    "modelType": "Base"
  }'

# Pro model with reference image and custom prompt
curl -X POST "https://api.ideal.house/api/v1/housePlan/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "style": "Victorian",
    "stories": "3+",
    "bedrooms": "5+",
    "bathrooms": "4+",
    "totalArea": "300-380 m²",
    "garageEnabled": true,
    "garageType": "Front Entry",
    "garageCapacity": "3+",
    "basement": "Full",
    "roofType": "Gable roof",
    "outdoorSpaces": ["Front porch", "Balcony", "Courtyard", "Outdoor Kitchen"],
    "layoutConcept": "Traditional",
    "bedroomAreaRanges": [
      { "name": "Room 1 (Master)", "minArea": "18", "maxArea": "28", "unit": "m²" },
      { "name": "Room 2", "minArea": "12", "maxArea": "16", "unit": "m²" },
      { "name": "Room 3", "minArea": "12", "maxArea": "16", "unit": "m²" },
      { "name": "Room 4", "minArea": "10", "maxArea": "14", "unit": "m²" },
      { "name": "Room 5", "minArea": "10", "maxArea": "14", "unit": "m²" }
    ],
    "bathroomLayouts": [
      { "name": "Bathroom 1", "layout": "With Wet & Dry Separation" },
      { "name": "Bathroom 2", "layout": "With Wet & Dry Separation" },
      { "name": "Bathroom 3", "layout": "Without Separation" },
      { "name": "Bathroom 4", "layout": null }
    ],
    "kitchenLayout": "Closed Kitchen",
    "kitchenFeatureOptions": ["Kitchen Island", "Breakfast Nook"],
    "keyRooms": "Home Office, Bonus Room, Media Room, Guest Suite",
    "prompt": "Grand Victorian mansion with ornate details and wraparound porch",
    "refImageUrl": "https://example.com/reference-house.jpg",
    "modelType": "Pro"
  }'
Java (OkHttp)
java
import okhttp3.*;
import java.io.IOException;

public class HousePlanApiExample {

    private static final String BASE_URL = "https://api.ideal.house";
    private static final String API_KEY  = "your_api_key_here";

    public static void main(String[] args) throws IOException {
        OkHttpClient client = new OkHttpClient();

        String requestBody = """
            {
                "style": "Barndominium",
                "stories": "2",
                "bedrooms": "2",
                "bathrooms": "1",
                "totalArea": "150-200 m²",
                "garageEnabled": false,
                "garageType": null,
                "garageCapacity": null,
                "basement": "None",
                "roofType": null,
                "outdoorSpaces": [],
                "layoutConcept": null,
                "bedroomAreaRanges": [
                    { "name": "Room 1 (Master)", "minArea": "12", "maxArea": "18", "unit": "m²" },
                    { "name": "Room 2", "minArea": "10", "maxArea": "14", "unit": "m²" }
                ],
                "bathroomLayouts": [
                    { "name": "Bathroom 1", "layout": null }
                ],
                "kitchenLayout": null,
                "kitchenFeatureOptions": [],
                "keyRooms": null,
                "prompt": "",
                "refImageUrl": "",
                "modelType": "Base"
            }
            """;

        Request request = new Request.Builder()
            .url(BASE_URL + "/api/v1/housePlan/generate")
            .addHeader("APIKEY", API_KEY)
            .addHeader("Content-Type", "application/json")
            .post(RequestBody.create(requestBody, MediaType.parse("application/json")))
            .build();

        try (Response response = client.newCall(request).execute()) {
            System.out.println("Response: " + response.body().string());
        }
    }
}
Python (requests)
python
import requests

BASE_URL = "https://api.ideal.house"
API_KEY  = "your_api_key_here"

headers = {
    "APIKEY": API_KEY,
    "Content-Type": "application/json"
}

payload = {
    "style": "Barndominium",
    "stories": "2",
    "bedrooms": "2",
    "bathrooms": "1",
    "totalArea": "150-200 m²",
    "garageEnabled": False,
    "garageType": None,
    "garageCapacity": None,
    "basement": "None",
    "roofType": None,
    "outdoorSpaces": [],
    "layoutConcept": None,
    "bedroomAreaRanges": [
        { "name": "Room 1 (Master)", "minArea": "12", "maxArea": "18", "unit": "m²" },
        { "name": "Room 2", "minArea": "10", "maxArea": "14", "unit": "m²" }
    ],
    "bathroomLayouts": [
        { "name": "Bathroom 1", "layout": None }
    ],
    "kitchenLayout": None,
    "kitchenFeatureOptions": [],
    "keyRooms": None,
    "prompt": "",
    "refImageUrl": "",
    "modelType": "Base"
}

response = requests.post(
    f"{BASE_URL}/api/v1/housePlan/generate",
    headers=headers,
    json=payload
)

data = response.json()
task_id = data.get("data")
print(f"Task ID: {task_id}")
Node.js (axios)
javascript
const axios = require('axios');

const BASE_URL = 'https://api.ideal.house';
const API_KEY  = 'your_api_key_here';

async function createHousePlanTask() {
  try {
    const response = await axios.post(
      `${BASE_URL}/api/v1/housePlan/generate`,
      {
        style: 'Barndominium',
        stories: '2',
        bedrooms: '2',
        bathrooms: '1',
        totalArea: '150-200 m²',
        garageEnabled: false,
        garageType: null,
        garageCapacity: null,
        basement: 'None',
        roofType: null,
        outdoorSpaces: [],
        layoutConcept: null,
        bedroomAreaRanges: [
          { name: 'Room 1 (Master)', minArea: '12', maxArea: '18', unit: 'm²' },
          { name: 'Room 2', minArea: '10', maxArea: '14', unit: 'm²' }
        ],
        bathroomLayouts: [
          { name: 'Bathroom 1', layout: null }
        ],
        kitchenLayout: null,
        kitchenFeatureOptions: [],
        keyRooms: null,
        prompt: '',
        refImageUrl: '',
        modelType: 'Base'
      },
      {
        headers: {
          'APIKEY': API_KEY,
          'Content-Type': 'application/json'
        }
      }
    );

    const taskId = response.data.data;
    console.log('Task ID:', taskId);
    return taskId;
  } catch (error) {
    console.error('Error:', error.response?.data || error.message);
  }
}

createHousePlanTask();

📤 Ответ#

Успешный ответ

json
{
  "code": 0,
  "message": "success",
  "data": 1234567890123456789
}
ПолеТипОписание
codeinteger0 указывает на успех
messagestringСообщение в ответе
datalongУникальный идентификатор задачи для опроса результатов

2. Получение результата задачи#

Возвращает текущий статус и результат ранее созданной задачи генерации плана дома.

Конечная точка

Обычный текст
GET /api/v1/housePlan/result

Заголовки запроса

ЗаголовокОбязательныйОписание
APIKEY✅ ДаВаш ключ аутентификации API

Параметры запроса

ПараметрТипОбязательныйОписание
taskIdlong✅ ДаИдентификатор задачи, возвращенный из конечной точки создания задачи

📥 Примеры запросов#

cURL
bash
curl -X GET "https://api.ideal.house/api/v1/housePlan/result?taskId=1234567890123456789" \
  -H "APIKEY: your_api_key_here"
Java (OkHttp)
java
import okhttp3.*;
import java.io.IOException;

public class HousePlanResultExample {

    private static final String BASE_URL = "https://api.ideal.house";
    private static final String API_KEY  = "your_api_key_here";

    public static void main(String[] args) throws IOException {
        OkHttpClient client = new OkHttpClient();
        long taskId = 1234567890123456789L;

        Request request = new Request.Builder()
            .url(BASE_URL + "/api/v1/housePlan/result?taskId=" + taskId)
            .addHeader("APIKEY", API_KEY)
            .get()
            .build();

        try (Response response = client.newCall(request).execute()) {
            System.out.println("Response: " + response.body().string());
        }
    }
}
Python (requests)
python
import requests
import time

BASE_URL = "https://api.ideal.house"
API_KEY  = "your_api_key_here"

headers = {
    "APIKEY": API_KEY
}

task_id = 1234567890123456789

# Poll until task is complete
while True:
    response = requests.get(
        f"{BASE_URL}/api/v1/housePlan/result",
        headers=headers,
        params={"taskId": task_id}
    )

    data = response.json()
    result = data.get("data", {})
    status = result.get("status")

    print(f"Status: {status}, Progress: {result.get('percentage')}%, Queue: {result.get('waitNumber')}")

    if status in ("Success", "Failed", "Termination"):
        break

    time.sleep(3)  # Poll every 3 seconds

if status == "Success":
    output = result["output"]
    print("Composite Result URL:", output["resultUrl"])
    print("Result List:", output.get("resultList", []))
else:
    print("Task ended with status:", status)
Node.js (axios)
javascript
const axios = require('axios');

const BASE_URL = 'https://api.ideal.house';
const API_KEY  = 'your_api_key_here';

async function pollResult(taskId) {
  const headers = { 'APIKEY': API_KEY };

  while (true) {
    const response = await axios.get(
      `${BASE_URL}/api/v1/housePlan/result`,
      {
        headers,
        params: { taskId }
      }
    );

    const result = response.data.data;
    const { status, percentage, waitNumber } = result;

    console.log(`Status: ${status} | Progress: ${percentage}% | Queue: ${waitNumber}`);

    if (['Success', 'Failed', 'Termination'].includes(status)) {
      if (status === 'Success') {
        console.log('Composite Result URL:', result.output.resultUrl);
        console.log('Result List:', result.output.resultList);
      } else {
        console.log('Task ended with status:', status);
      }
      break;
    }

    // Wait 3 seconds before next poll
    await new Promise(resolve => setTimeout(resolve, 3000));
  }
}

pollResult(1234567890123456789n);

📤 Ответ#

📸 Примечание: Этот API генерирует ровно 1 составное изображение результата на каждую успешно выполненную задачу. На одном презентационном листе объединены 2D-планы этажей, чертежи фасадов и фотореалистичные визуализации экстерьера. output.resultUrl содержит URL составного изображения, а output.resultList — тот же URL в массиве из одного элемента для совместимости.

Успешный ответ (задача завершена)

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Success",
    "waitNumber": 0,
    "percentage": 100,
    "input": {
      "style": "Barndominium",
      "stories": "2",
      "bedrooms": "2",
      "bathrooms": "1",
      "totalArea": "150-200 m²",
      "garageEnabled": false,
      "garageType": null,
      "garageCapacity": null,
      "basement": "None",
      "roofType": null,
      "outdoorSpaces": [],
      "layoutConcept": null,
      "bedroomAreaRanges": [
        { "name": "Room 1 (Master)", "minArea": "12", "maxArea": "18", "unit": "m²" },
        { "name": "Room 2", "minArea": "10", "maxArea": "14", "unit": "m²" }
      ],
      "bathroomLayouts": [
        { "name": "Bathroom 1", "layout": null }
      ],
      "kitchenLayout": null,
      "kitchenFeatureOptions": [],
      "keyRooms": null,
      "prompt": "",
      "refImageUrl": "",
      "modelType": "Base"
    },
    "output": {
      "resultUrl": "https://cdn.ideal.house/output/house_plan_composite.jpg",
      "resultList": [
        "https://cdn.ideal.house/output/house_plan_composite.jpg"
      ],
      "width": 2560,
      "height": 1440
    }
  }
}

Ответ (обработка задачи / в очереди)

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Processing",
    "waitNumber": 1,
    "percentage": 45,
    "input": {
      "style": "Barndominium",
      "stories": "2",
      "bedrooms": "2",
      "bathrooms": "1",
      "totalArea": "150-200 m²",
      "garageEnabled": false,
      "garageType": null,
      "garageCapacity": null,
      "basement": "None",
      "roofType": null,
      "outdoorSpaces": [],
      "layoutConcept": null,
      "bedroomAreaRanges": [
        { "name": "Room 1 (Master)", "minArea": "12", "maxArea": "18", "unit": "m²" },
        { "name": "Room 2", "minArea": "10", "maxArea": "14", "unit": "m²" }
      ],
      "bathroomLayouts": [
        { "name": "Bathroom 1", "layout": null }
      ],
      "kitchenLayout": null,
      "kitchenFeatureOptions": [],
      "keyRooms": null,
      "prompt": "",
      "refImageUrl": "",
      "modelType": "Base"
    },
    "output": null
  }
}

Ответ (задача завершилась ошибкой)

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Failed",
    "waitNumber": 0,
    "percentage": 0,
    "input": {
      "style": "Barndominium",
      "stories": "2",
      "bedrooms": "2",
      "bathrooms": "1",
      "totalArea": "150-200 m²",
      "garageEnabled": false,
      "basement": "None",
      "modelType": "Base"
    },
    "output": null
  }
}

Поля ответа

ПолеТипОписание
idlongУникальный идентификатор задачи
statusstringТекущий статус задачи (см. Статус задачи)
waitNumberintegerКоличество задач впереди в очереди (0 означает текущую обработку)
percentageintegerПроцент завершения задачи (0–100)
inputobjectИсходные входные параметры задачи
input.stylestringАрхитектурный стиль
input.totalAreastringДиапазон общей площади
input.storiesstringКоличество этажей
input.bedroomsstringКоличество спален
input.bathroomsstringКоличество ванных комнат
input.garageEnabledbooleanЗапрошен ли гараж
input.garageTypestring / nullТип гаража
input.garageCapacitystring / nullКоличество машино-мест в гараже
input.basementstringТип подвала
input.roofTypestringТип крыши
input.outdoorSpacesarray<string>Внешние зоны
input.layoutConceptstringОбщая концепция планировки
input.bedroomAreaRangesarray<object>Диапазоны площади спален
input.bathroomLayoutsarray<object>Выбор планировки ванных комнат
input.kitchenLayoutstringСтиль планировки кухни
input.kitchenFeatureOptionsarray<string>Необязательные особенности кухни
input.keyRoomsstringКлючевые специальные комнаты (разделенные запятыми)
input.promptstringПользовательский текстовый промпт (если указан)
input.refImageUrlstringURL референсного изображения (если указано)
input.modelTypestringИспользованный тип модели
outputobjectРезультат генерации (доступен только когда status равно Success)
output.resultUrlstringURL сгенерированного составного презентационного листа проекта дома
output.resultListarray<string>URL сгенерированных изображений. Для плана дома это обычно массив из одного элемента с тем же URL, что и output.resultUrl
output.widthintegerШирина результата в пикселях
output.heightintegerВысота результата в пикселях

📊 Статус задачи#

СтатусОписание
UnprocessedЗадача создана, но еще не начата
ProcessingЗадача в настоящее время обрабатывается
SuccessЗадача успешно завершена — результат доступен
FailedЗадача не выполнена из-за ошибки
TerminationВыполнение задачи было прервано или прекращено

Опрашивайте каждые 3-5 секунд. См. Лимит задач API.


❌ Ответы об ошибках#

Все ответы об ошибках имеют одинаковую структуру JSON:

json
{
  "code": 5002,
  "message": "Invalid API Key",
  "data": null
}

Справочник кодов ошибок#

КодНазваниеОписаниеРекомендуемое действие
1001FAILEDЗапрос не выполнен (общая ошибка)Проверьте поле message для получения конкретных деталей ошибки
1003INTERNAL_ERRORВнутренняя ошибка сервераПовторите попытку после короткой задержки; обратитесь в поддержку, если проблема сохраняется
1011PARAM_ERRORОшибка параметра запросаУбедитесь, что все обязательные параметры предоставлены и правильно отформатированы
5002API_KEY_INVALIDНедействительный или отсутствующий ключ APIУбедитесь, что заголовок APIKEY присутствует и значение корректно
9010SCAN_TEXT_ERRORТекстовый запрос не прошёл проверку контентаУдалите из запроса чувствительный или запрещённый контент
9038PROHIBITED_CONTENTСгенерированное выходное изображение содержит запрещенный контентОтрегулируйте промпт/стиль/входные данные и повторите попытку
9051COINS_NOT_ENOUGHНедостаточно монет / кредитовПополните кредиты на вашем аккаунте и повторите попытку

📄 Для полного списка общих кодов ошибок API см. Справочник кодов ошибок.