Ideal House
Przejdź do treści

Dokumentacja API wizualizacji planów#

Podstawowy URL: https://api.ideal.house
Wersja: v1
Zaktualizowano: 2026-05-21


📖 Przegląd#

API wizualizatora planów przekształca obraz planu w wizualizację generowaną przez AI. Obsługuje opcjonalne wytyczne tekstowe, typ planu, styl wizualny, opcje widoku oraz tryby modelu.

Praca jest asynchroniczna:

  1. Utwórz zadanie — Prześlij imageUrl i opcjonalne parametry, a następnie otrzymaj taskId.
  2. Sprawdzaj wyniki — Użyj taskId, aby pobrać status zadania i wygenerowany obraz.

🔐 Uwierzytelnianie#

NagłówekWartość
APIKEYyour_api_key_here

💰 Odejmowanie kredytów#

[!WARNING] Kredyty są odejmowane, gdy zadanie zostanie pomyślnie utworzone. Jeśli zadanie ostatecznie nie powiodzie się, odejęte kredyty zostaną automatycznie zwrócone.
Niewystarczające kredyty zwrócą kod błędu 9051. Zobacz Referencja odejmowania kredytów.

Model (modelType)Odejęte kredyty
Base3 kredytów
Pro10 kredytów

Jeśli nie podano modelType, domyślnie używane jest Base.


🎨 Opcje stylu#

To API obsługuje opcjonalne parametry stylu zwracane przez punkt końcowy Konfiguracja stylu API.

Użyj:

Zwykły tekst
GET /api/v1/style/ai_plan_visualizer/getStyles
Grupa stylówPole żądaniaOpis
planTypeplanStyleIdOpcja typu planu
stylestyleIdOpcja stylu wizualizacji
viewviewIdOpcja kamery/widoku

Każda opcja zawiera name, id i url. Przeprowadź id opcji do odpowiadającego pola żądania.


📌 Punkty końcowe API#

1. Utworzenie zadania wizualizatora planów#

Punkt końcowy

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

Nagłówki żądania

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

Ciało żądania

PoleTypWymaganeOpis
imageUrlstring✅ TakURL obrazu źródłowego planu
promptstring❌ OpcjonalneWytyczne tekstowe dla żądanej wizualizacji
planStyleIdstring❌ OpcjonalneIdentyfikator typu planu z opcji stylów planType
styleIdstring❌ OpcjonalneIdentyfikator stylu wizualizacji z opcji stylów style
viewIdstring❌ OpcjonalneIdentyfikator widoku z opcji stylów view
modelTypestring❌ OpcjonalneWyliczenie: Base, Pro. Domyślnie Base

Wymagane jest wyłącznie imageUrl. Wszystkie pozostałe pola są opcjonalne.

🖼️ Wymagania dotyczące obrazów: Wszystkie obrazy źródłowe i referencyjne muszą używać formatu JPG/JPEG, PNG lub WebP. Każdy obraz nie może być większy niż 20 MB, z wymiarami 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. Adresy URL muszą być bezpośrednio dostępne dla serwera API.

📥 Przykłady żądań#

cURL
bash
curl -X POST "https://api.ideal.house/api/v1/planVisualizer/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "imageUrl": "https://example.com/floor-plan.jpg",
    "prompt": "bright modern residential visualization",
    "planStyleId": "AI plan visualizer_Plan type_Master plan",
    "styleId": "AI plan visualizer_Style_Marker pen",
    "viewId": "AI plan visualizer_View_Top-Down View",
    "modelType": "Base"
  }'
Java (OkHttp)
java
import okhttp3.*;

import java.io.IOException;

public class PlanVisualizerApiExample {

    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 = """
                {
                    "imageUrl": "https://example.com/floor-plan.jpg",
                    "prompt": "bright modern residential visualization",
                    "planStyleId": "AI plan visualizer_Plan type_Master plan",
                    "styleId": "AI plan visualizer_Style_Marker pen",
                    "viewId": "AI plan visualizer_View_Top-Down View",
                    "modelType": "Base"
                }
                """;

        Request request = new Request.Builder()
                .url(BASE_URL + "/api/v1/planVisualizer/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 = {
    "imageUrl": "https://example.com/floor-plan.jpg",
    "prompt": "bright modern residential visualization",
    "planStyleId": "AI plan visualizer_Plan type_Master plan",
    "styleId": "AI plan visualizer_Style_Marker pen",
    "viewId": "AI plan visualizer_View_Top-Down View",
    "modelType": "Base"
}

response = requests.post(
    f"{BASE_URL}/api/v1/planVisualizer/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 createPlanVisualizerTask() {
  try {
    const response = await axios.post(
      `${BASE_URL}/api/v1/planVisualizer/generate`,
      {
        imageUrl: 'https://example.com/floor-plan.jpg',
        prompt: 'bright modern residential visualization',
        planStyleId: 'AI plan visualizer_Plan type_Master plan',
        styleId: 'AI plan visualizer_Style_Marker pen',
        viewId: 'AI plan visualizer_View_Top-Down View',
        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);
  }
}

createPlanVisualizerTask();

📤 Odpowiedź#

json
{
  "code": 0,
  "message": "success",
  "data": 1234567890123456789
}

2. Pobranie wyniku zadania#

Punkt końcowy

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

Nagłówki żądania

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

Parametry zapytania

ParametrTypWymaganyOpis
taskIdlong✅ TakIdentyfikator zadania zwrócony przez punkt końcowy tworzenia

📥 Przykłady żądań#

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

import java.io.IOException;

public class PlanVisualizerResultExample {

    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/planVisualizer/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

while True:
    response = requests.get(
        f"{BASE_URL}/api/v1/planVisualizer/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"):
        break

    time.sleep(3)

if status == "Success":
    print("Result URL:", result["output"]["resultUrl"])
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 pollPlanVisualizerResult(taskId) {
  const headers = { APIKEY: API_KEY };

  while (true) {
    const response = await axios.get(
      `${BASE_URL}/api/v1/planVisualizer/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'].includes(status)) {
      if (status === 'Success') {
        console.log('Result URL:', result.output.resultUrl);
        console.log('Size:', result.output.width, 'x', result.output.height);
      } else {
        console.log('Task ended with status:', status);
      }
      break;
    }

    await new Promise(resolve => setTimeout(resolve, 3000));
  }
}

pollPlanVisualizerResult(1234567890123456789n);

📤 Przykład odpowiedzi#

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Success",
    "waitNumber": 0,
    "percentage": 100,
    "input": {
      "imageUrl": "https://example.com/floor-plan.jpg",
      "prompt": "bright modern residential visualization",
      "planStyleId": "AI plan visualizer_Plan type_Master plan",
      "styleId": "AI plan visualizer_Style_Marker pen",
      "viewId": "AI plan visualizer_View_Top-Down View",
      "modelType": "Base"
    },
    "output": {
      "resultUrl": "https://cdn.ideal.house/output/plan_visualizer_result.jpg",
      "width": 1024,
      "height": 1024
    }
  }
}

Odpowiedź (Zadanie w trakcie przetwarzania / W kolejce)

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Processing",
    "waitNumber": 1,
    "percentage": 45,
    "input": {
      "imageUrl": "https://example.com/floor-plan.jpg",
      "modelType": "Base"
    },
    "output": null
  }
}

Odpowiedź (Zadanie nie powiodło się)

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Failed",
    "waitNumber": 0,
    "percentage": 0,
    "input": {
      "imageUrl": "https://example.com/floor-plan.jpg",
      "modelType": "Base"
    },
    "output": null
  }
}

📊 Status zadania#

StatusOpis
UnprocessedZadanie zostało utworzone i czeka w kolejce
ProcessingZadanie jest obecnie wykonywane
SuccessZadanie zakończyło się pomyślnie
FailedZadanie nie powiodło się i nie wytworzono wyjścia

Wykonuj cykliczne sprawdzanie co 3-5 sekund. Zobacz Limit zadań API.


❌ Odpowiedzi błędów#

KodNazwaOpis
1011PARAM_ERRORBłąd parametru żądania
5002API_KEY_INVALIDNieprawidłowy lub brakujący klucz API
9010SCAN_TEXT_ERRORPolecenie nie przeszło weryfikacji treści
9038PROHIBITED_CONTENTWygenerowany obraz zawiera zakazaną treść
9051COINS_NOT_ENOUGHNiewystarczające kredyty

W celu zapoznania się z pełnymi definicjami powszechnych błędów, zobacz Referencja kodów błędów.