Ideal House
Przejdź do treści

Dokumentacja API generowania planów domów#

Podstawowy URL: https://api.ideal.house
Wersja: v1
Zaktualizowano: 2026-06-12


📖 Przegląd#

API generowania planów domów umożliwia tworzenie prezentacji planów domów generowanych przez AI na podstawie stylu architektonicznego, powierzchni, konfiguracji konstrukcyjnej oraz preferencji dotyczących układu wnętrza. Po pomyślnym wygenerowaniu API tworzy dokładnie 1 złożony obraz wyniku na zadanie. Obraz zawiera skoordynowane 2D rzuty kondygnacji, elewacje zewnętrzne oraz fotorealistyczne renderowania zewnętrzne na jednej tablicy prezentacyjnej. Wynik jest przechowywany w output.resultUrl i zawiera się również jako jedyny element w output.resultList. Przepływ pracy jest asynchroniczny i obejmuje dwa kroki:

  1. Utworzenie zadania — Prześlij parametry planu domu i odbierz taskId.
  2. Cykliczne sprawdzanie wyników — Wykorzystaj taskId, aby zapytać o status zadania i pobrać wygenerowane obrazy.

🔐 Uwierzytelnianie#

Wszystkie żądania API muszą być uwierzytelniane za pomocą klucza API.

Włącz swój klucz API w nagłówku żądania:

NagłówekWartość
APIKEYyour_api_key_here

⚠️ Zabezpiecz swój klucz API. Nie ujawniaj go w kodzie po stronie klienta ani w publicznych repozytoriach.


💰 Odejmowanie kredytów#

[!WARNING] 🪙 Po pomyślnym utworzeniu zadania kredyty są pobierane zgodnie z wybranym modelType. Jeśli zadanie ostatecznie zakończy się błędem, pobrane kredyty zostaną automatycznie zwrócone na Twoje konto.
Niewystarczające kredyty zwrócą kod błędu 9051. 📄 Zobacz Referencja odejmowania kredytów.

Model (modelType)Odebrane kredyty
Base10 kredytów
Pro20 kredytów

📌 Końcówki API#


1. Utworzenie zadania planu domu#

Tworzy nowe zadanie generowania planu domu przez AI i zwraca unikalny taskId do cyklicznego sprawdzania.

Końcówka

Zwykły tekst
POST /api/v1/housePlan/generate

Nagłówki żądania

NagłówekWymaganyOpis
APIKEY✅ TakTwój klucz uwierzytelniający API
Content-Type✅ Takapplication/json

Ciało żądania

PoleTypWymaganeOpisDomyślnie
stylestring / null✅ TakAngielska nazwa stylu architektonicznego. Zobacz Opcje stylówBarndominium
storiesstring✅ TakLiczba kondygnacji. Wyliczenie: 1, 2, 3+2
bedroomsstring✅ TakLiczba sypialni. Wyliczenie: 1, 2, 3, 4, 5+2
bathroomsstring✅ TakLiczba łazienek. Wyliczenie: 1, 1.5, 2, 2.5, 3, 3.5, 4+1
totalAreastring✅ TakZakres całkowitej powierzchni w formacie min-max unit. Zobacz Opcje całkowitej powierzchni150-200 m²
garageEnabledboolean✅ TakCzy dołączyć garażfalse
garageTypestring / null⚠️ WarunkoweWymagane, gdy garageEnabled=true. Zobacz Opcje typu garażunull
garageCapacitystring / null⚠️ WarunkoweWymagane, gdy garageEnabled=true. Zobacz Pojemność garażunull
basementstring✅ TakTyp piwnicy. Zobacz Opcje piwnicyNone
roofTypestring / null❌ NieTyp konstrukcji dachu. Zobacz Opcje typu dachunull
outdoorSpacesarray<string>❌ NiePrzestrzenie zewnętrzne. Zobacz Opcje przestrzeni zewnętrznych[]
layoutConceptstring / null❌ NieOgólny koncept układu wnętrza. Zobacz Opcje konceptu układunull
bedroomAreaRangesarray<object>✅ TakZakresy powierzchni sypialni. Długość musi odpowiadać liczbie sypialni. Zobacz Zakresy powierzchni sypialniZobacz przykład
bathroomLayoutsarray<object>✅ TakWybory układu łazienek. Długość musi wynosić Math.floor(bathrooms). Zobacz Układy łazienekZobacz przykład
kitchenLayoutstring / null❌ NieUkład kuchni. Zobacz Opcje kuchninull
kitchenFeatureOptionsarray<string>❌ NieOpcjonalne funkcje kuchni. Zobacz Opcje kuchni[]
keyRoomsstring / null❌ NiePokoje specjalne połączone przecinkiem i spacją. Zobacz Opcje kluczowych pokoinull
promptstring❌ NieWłasny prompt tekstowy do dalszego kierowania generowaniem""
refImageUrlstring❌ NieURL obrazu referencyjnego domu do kierowania stylem""
modelTypestring✅ TakTyp jakości modelu. Wyliczenie: Base, Pro. ⚠️ Tryb Flash jest niewspieranyBase

🖼️ Wymagania dotyczące obrazu: Opcjonalny obraz referencyjny musi być w formacie JPG/JPEG, PNG lub WebP, nie może przekraczać 20 MB, a jego wymiary muszą mieścić się w przedziale od 128 × 128 px do 6,000 × 6,000 px (włącznie). Obrazy przekraczające maksymalne wymiary pikseli są automatycznie skalowane proporcjonalnie, aby zmieściły się w 6,000 × 6,000 px przed przetwarzaniem. Jego URL musi być bezpośrednio dostępny dla serwera API.


🎨 Opcje stylów#

WartośćOpis
BarndominiumDomyślny. Hybrydowy dom w stylu metalowego stodoły
Cabinrustykalny styl drewnianego domku
Cape Codklasyczny symetryczny styl Nowej Anglii
Coastallekki, przestronny styl inspirowany plażą
Colonialtradycyjna symetryczna architektura kolonialna
Contemporaryczyste linie i nowoczesne materiały
Craftsmanręcznie wykonane detale z naturalnych materiałów
Farmhouserustykalny styl wiejskiej farmy
French Countryelegancki francuski styl prowansalski
Mediterraneanciepły tynk z elementami terakoty
Mid-Century Modernczysty geometryczny modernizm z lat 1950.–70.
Modernminimalistyczny płaski/kątowny design nowoczesny
Ranchparterowy rozległy układ
Shingle Styleciągła drewniana elewacja z gontów
Southwesternpustynny styl inspirowany adobe
Transitionalpołączenie tradycyjnego i współczesnego
Tudorśredniowieczny angielski styl z szachulcem
Victorianozdobny dekoracyjny styl z 19. wieku

📐 Opcje całkowitej powierzchni#

Pole totalArea używa formatu min-max unit. Wartości metryczne używają ; wartości imperialne używają ft². Wartość minimalna musi być niższa od wartości maksymalnej o co najmniej jeden krok.

JednostkaMinimumMaksimumKrokPrzykład
5050010150-200 m²
ft²50050001001500-2000 ft²

🏠 Opcje typu dachu#

WartośćOpis
Gable roofklasyczny trójkątny dach spadzisty
Hip roofspadki na wszystkich czterech stronach
Flat roofminimalnie spadzisty dach płaski
Pitched roofogólny mocno spadzisty dach

🏗️ Opcje piwnicy#

WartośćOpis
Nonebrak piwnicy
Partialpiwnica częściowa
Fullpiwnica pełna

🚗 Opcje typu garażu#

garageType jest wymagane tylko, gdy garageEnabled=true; w przeciwnym razie wyślij null.

WartośćOpis
Detachedgaraż wolnostojący
Front Entrywejście do garażu od frontu
Side Entrywejście do garażu od boku
Rear Entrywejście do garażu od tyłu

🚗 Pojemność garażu#

garageCapacity jest wymagane tylko, gdy garageEnabled=true; w przeciwnym razie wyślij null.

WartośćOpis
1garaż na jeden samochód
2garaż na dwa samochody
3+trzy lub więcej miejsc parkingowych

🌿 Opcje przestrzeni zewnętrznych#

Pole outdoorSpaces przyjmuje tablicę następujących wartości.

WartośćOpis
Front porchzadaszony wiatrołan przy wejściu od frontu
Covered patiozadaszony zewnętrzny taras
Decktaras drewniany lub z kompozytu
Balconypodwyższona zewnętrzna platforma
Courtyardzamknięty lub częściowo zamknięty zewnętrzny dziedziniec
Breezewayzadaszony korytarz łączący budynki
Outdoor Kitchenzewnętrzna strefa gotowania i jedzenia

Przykład

Zwykły tekst
"outdoorSpaces": ["Front porch", "Deck", "Balcony"]

🏛️ Opcje konceptu układu#

WartośćOpis
Open Conceptotwarte połączone przestrzenie mieszkalne
Traditionalrozdzielone pokoje z zdefiniowanymi granicami
Split-Levelprzesunięte poziomy posadzek między strefami

🛏️ Zakresy powierzchni sypialni#

Pole bedroomAreaRanges musi być tablicą, której długość odpowiada liczbie bedrooms. Każdy element ma następującą strukturę:

PoleTypOpis
namestringnazwa wyświetlana sypialni, na przykład Room 1 (Master)
minAreastringminimalna powierzchnia sypialni. Musi być nieujemnym ciągiem znaków liczbowym
maxAreastringmaksymalna powierzchnia sypialni. Musi być większa lub równa minArea
unitstringjednostka powierzchni. Wyliczenie: , ft²

Domyślny przykład dla bedrooms="2"

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

🛁 Układy łazienek#

Pole bathroomLayouts musi być tablicą, której długość wynosi Math.floor(bathrooms). Na przykład bathrooms="2.5" wymaga 2 obiektów układu łazienki.

PoleTypOpis
namestringnazwa wyświetlana łazienki, na przykład Bathroom 1
layoutstring / nullWyliczenie: With Wet & Dry Separation, Without Separation lub null

Domyślny przykład dla bathrooms="1"

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

🍳 Opcje kuchni#

Układ kuchni

WartośćOpis
Open Kitchenotwarta kuchnia połączona z salonem/jadalnią
Closed Kitchenzamknięta osobna przestrzeń kuchni

Opcje funkcji kuchni

WartośćOpis
Eating Barbar / siedziska przy blacie
Kitchen Islandwyspa kuchenna
Breakfast Nookkącik śniadaniowy

🚪 Opcje kluczowych pokoi#

Pole keyRooms przyjmuje jedną lub więcej z następujących wartości. Przy wyborze wielu opcji połącz je przecinkiem (,).

WartośćOpis
Home Officededykowany domowy biuro lub gabinet
Bonus Roomelastyczny wielofunkcyjny dodatkowy pokój
Media Roomdomowy teatr lub centrum multimedialne
Mudroompokój wejściowy na sprzęt zewnętrzny
Laundry Roomdedykowana pralnia
Guest Suitesamodzielny apartament gościnny

Przykład

Zwykły tekst
"keyRooms": "Home Office, Media Room, Guest Suite"

Typy modeli

WartośćOpis
BaseDomyślny. Zbalansowana prędkość i jakość. Generuje złożoną tablicę prezentacyjną w wysokiej rozdzielczości
Prowyższa jakość i wyższa rozdzielczość wyjścia, wolniejsze

⚠️ Uwaga: Tryb Flash jest niedostępny dla tego API. Wspierane są tylko Base i Pro.


📥 Przykłady żądań#

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();

📤 Odpowiedź#

Odpowiedź sukcesu

json
{
  "code": 0,
  "message": "success",
  "data": 1234567890123456789
}
PoleTypOpis
codeinteger0 wskazuje sukces
messagestringkomunikat odpowiedzi
datalongunikalny identyfikator zadania do cyklicznego sprawdzania wyników

2. Pobranie wyniku zadania#

Pobiera bieżący status i wynik wcześniej utworzonego zadania planu domu.

Końcówka

Zwykły tekst
GET /api/v1/housePlan/result

Nagłówki żądania

NagłówekWymaganyOpis
APIKEY✅ TakTwój klucz uwierzytelniający API

Parametry zapytania

ParametrTypWymaganyOpis
taskIdlong✅ Takidentyfikator zadania zwrócony z końcówki tworzenia zadania

📥 Przykłady żądań#

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);

📤 Odpowiedź#

📸 Uwaga: Ten API generuje dokładnie 1 złożony obraz wyniku na pomyślne zadanie. Obraz łączy 2D rzuty kondygnacji, elewacje zewnętrzne i fotorealistyczne renderowania zewnętrzne na jednej tablicy prezentacyjnej. output.resultUrl zawiera URL obrazu złożonego, a output.resultList zawiera ten sam URL jako tablicę z jednym elementem w celu zapewnienia kompatybilności.

Odpowiedź sukcesu (zadanie zakończone)

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
    }
  }
}

Odpowiedź (zadanie w trakcie przetwarzania / w kolejce)

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
  }
}

Odpowiedź (zadanie niepowodzenie)

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
  }
}

Pola odpowiedzi

PoleTypOpis
idlongunikalny identyfikator zadania
statusstringbieżący status zadania (zobacz Status zadania)
waitNumberintegerliczba zadań przed Tobą w kolejce (0 oznacza bieżące przetwarzanie)
percentageintegerprocent ukończenia zadania (0–100)
inputobjectoryginalne parametry wejściowe zadania
input.stylestringstyl architektoniczny
input.totalAreastringzakres całkowitej powierzchni
input.storiesstringliczba kondygnacji
input.bedroomsstringliczba sypialni
input.bathroomsstringliczba łazienek
input.garageEnabledbooleanczy wymagano garażu
input.garageTypestring / nulltyp garażu
input.garageCapacitystring / nullliczba miejsc w garażu
input.basementstringtyp piwnicy
input.roofTypestringtyp dachu
input.outdoorSpacesarray<string>przestrzenie zewnętrzne
input.layoutConceptstringogólny koncept układu
input.bedroomAreaRangesarray<object>zakresy powierzchni sypialni
input.bathroomLayoutsarray<object>wybory układu łazienek
input.kitchenLayoutstringstyl układu kuchni
input.kitchenFeatureOptionsarray<string>opcjonalne funkcje kuchni
input.keyRoomsstringkluczowe pokoje specjalne (oddzielone przecinkami)
input.promptstringwłasny prompt tekstowy (jeśli podano)
input.refImageUrlstringURL obrazu referencyjnego (jeśli podano)
input.modelTypestringużyty typ modelu
outputobjectwynik generowania (dostępny tylko, gdy status wynosi Success)
output.resultUrlstringURL do wygenerowanej złożonej tablicy prezentacyjnej planu domu
output.resultListarray<string>URLs do wygenerowanych obrazów wyników. W przypadku planu domu jest to zazwyczaj tablica z jednym elementem zawierająca ten sam URL co output.resultUrl
output.widthintegerszerokość wyjścia w pikselach
output.heightintegerwysokość wyjścia w pikselach

📊 Status zadania#

StatusOpis
Unprocessedzadanie zostało utworzone, ale nie zostało jeszcze rozpoczęte
Processingzadanie jest obecnie przetwarzane
Successzadanie zakończyło się pomyślnie — wynik jest dostępny
Failedzadanie nie powiodło się z powodu błędu
Terminationzadanie zostało przerwane lub zakończone

Cyklicznie sprawdzaj co 3-5 sekund. Zobacz Limit zadań API.


❌ Odpowiedzi błędów#

Wszystkie odpowiedzi błędów mają tę samą strukturę JSON:

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

Referencja kodów błędów#

KodNazwaOpisSugerowane działanie
1001FAILEDżądanie nie powiodło się (błąd ogólny)Sprawdź pole message, aby uzyskać szczegółowe informacje o błędzie
1003INTERNAL_ERRORwewnętrzny błąd serweraPonów po krótkim opóźnieniu; skontaktuj się z pomocą techniczną, jeśli problem utrzymuje się
1011PARAM_ERRORbłąd parametru żądaniaZweryfikuj, czy wszystkie wymagane parametry są podane i poprawnie sformatowane
5002API_KEY_INVALIDnieprawidłowy lub brakujący klucz APIUpewnij się, że nagłówek APIKEY jest obecny i wartość jest poprawna
9010SCAN_TEXT_ERRORprompt tekstowy nie przeszedł weryfikacji treściZmodyfikuj prompt, aby usunąć wszelką wrażliwą lub zakazaną treść
9038PROHIBITED_CONTENTwygenerowany obraz wyjściowy zawiera zakazaną treśćDostosuj prompt/styl/wejścia i ponów
9051COINS_NOT_ENOUGHniewystarczające monety / kredytyDoładuj kredyty na swoim koncie i ponów

📄 Pełna lista powszechnych kodów błędów API znajduje się w Referencji kodów błędów.