Ideal House
Przejdź do treści

Dokumentacja Home Decor API#

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


📖 Przegląd#

Home Decor API generuje pomysły dekoracyjne dla obrazu wnętrza. Obsługuje opcjonalne wytyczne tekstowe, obraz referencyjny, wybór stylów i tryby modeli.

Przepływ pracy jest asynchroniczny:

  1. Utworzenie zadania — Prześlij imageUrl i opcjonalne parametry, a następnie otrzymasz taskId.
  2. Cykliczne sprawdzanie wyników — 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 zawiedzie, odejmowane kredyty zostaną automatycznie zwrócone.
Niewystarczająca liczba kredytów spowoduje zwrócenie kodu błędu 9051. Zobacz Odniesienie do odejmowania kredytów.

Model (modelType)Odejmowane kredyty
Base3 kredyty
Pro10 kredyty

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


🎨 Opcje stylów#

Ten API obsługuje opcjonalne parametry stylów zwracane przez punkt końcowy Konfiguracja stylów API.

Użyj:

Zwykły tekst
GET /api/v1/style/home_decor_ideas/getStyles
Grupa stylówPole żądaniaOpis
spaceTypespaceStyleIdOpcja typu przestrzeni lub pokoju
decorStylehomeDecorStyleIdOpcja stylu dekoracji

Każda opcja zawiera name, id i url. Przekazuj id opcji do odpowiedniego pola żądania.


📌 API Punkty końcowe#

1. Utworzenie zadania Home Decor#

Punkt końcowy

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

Nagłówki żądania

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

Ciało żądania

PoleTypWymaganeOpis
imageUrlstring✅ TakAdres URL źródłowego obrazu wnętrza
referenceUrlstring❌ OpcjonalnieAdres URL obrazu referencyjnego do kierowania stylem dekoracji
spaceStyleIdstring❌ OpcjonalnieID typu przestrzeni z opcji stylów spaceType
homeDecorStyleIdstring❌ OpcjonalnieID stylu dekoracji z opcji stylów decorStyle
promptstring❌ OpcjonalnieWytyczne tekstowe dla pożądanego wyniku
modelTypestring❌ OpcjonalnieWyliczenie: Base, Pro. Domyślnie Base

Wymagane jest tylko imageUrl. Wszystkie inne pola są opcjonalne.

🖼️ Wymagania dotyczące obrazów: Wszystkie obrazy źródłowe i referencyjne muszą być w formacie JPG/JPEG, PNG lub WebP. Każdy obraz nie może być większy niż 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ć się w 6,000 × 6,000 px przed przetwarzaniem. Adresy URL obrazów muszą być bezpośrednio dostępne dla serwera API.

📥 Przykłady żądań#

cURL
bash
curl -X POST "https://api.ideal.house/api/v1/homeDecor/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "imageUrl": "https://example.com/room.jpg",
    "referenceUrl": "https://example.com/reference.jpg",
    "spaceStyleId": "Indoor_Living Room",
    "homeDecorStyleId": "Holidays_Cozy Christmas",
    "prompt": "warm seasonal decor with natural textures",
    "modelType": "Base"
  }'
Java (OkHttp)
java
import okhttp3.*;

import java.io.IOException;

public class HomeDecorApiExample {

    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/room.jpg",
                    "referenceUrl": "https://example.com/reference.jpg",
                    "spaceStyleId": "Indoor_Living Room",
                    "homeDecorStyleId": "Holidays_Cozy Christmas",
                    "prompt": "warm seasonal decor with natural textures",
                    "modelType": "Base"
                }
                """;

        Request request = new Request.Builder()
                .url(BASE_URL + "/api/v1/homeDecor/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/room.jpg",
    "referenceUrl": "https://example.com/reference.jpg",
    "spaceStyleId": "Indoor_Living Room",
    "homeDecorStyleId": "Holidays_Cozy Christmas",
    "prompt": "warm seasonal decor with natural textures",
    "modelType": "Base"
}

response = requests.post(
    f"{BASE_URL}/api/v1/homeDecor/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 createHomeDecorTask() {
  try {
    const response = await axios.post(
      `${BASE_URL}/api/v1/homeDecor/generate`,
      {
        imageUrl: 'https://example.com/room.jpg',
        referenceUrl: 'https://example.com/reference.jpg',
        spaceStyleId: 'Indoor_Living Room',
        homeDecorStyleId: 'Holidays_Cozy Christmas',
        prompt: 'warm seasonal decor with natural textures',
        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);
  }
}

createHomeDecorTask();

📤 Odpowiedź#

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

2. Pobranie wyniku zadania#

Punkt końcowy

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

Nagłówki żądania

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

Parametry zapytania

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

📥 Przykłady żądań#

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

import java.io.IOException;

public class HomeDecorResultExample {

    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/homeDecor/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/homeDecor/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 pollHomeDecorResult(taskId) {
  const headers = { APIKEY: API_KEY };

  while (true) {
    const response = await axios.get(
      `${BASE_URL}/api/v1/homeDecor/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));
  }
}

pollHomeDecorResult(1234567890123456789n);

📤 Przykład odpowiedzi#

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Success",
    "waitNumber": 0,
    "percentage": 100,
    "input": {
      "imageUrl": "https://example.com/room.jpg",
      "refImageUrl": "https://example.com/reference.jpg",
      "spaceStyleId": "Indoor_Living Room",
      "homeDecorStyleId": "Holidays_Cozy Christmas",
      "prompt": "warm seasonal decor with natural textures",
      "modelType": "Base"
    },
    "output": {
      "resultUrl": "https://cdn.ideal.house/output/home_decor_result.jpg",
      "width": 1024,
      "height": 1024
    }
  }
}

Odpowiedź (Zadanie w trakcie / W kolejce)

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Processing",
    "waitNumber": 1,
    "percentage": 45,
    "input": {
      "imageUrl": "https://example.com/room.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/room.jpg",
      "modelType": "Base"
    },
    "output": null
  }
}

📊 Status zadania#

StatusOpis
UnprocessedZadanie zostało utworzone i czeka w kolejce
ProcessingZadanie jest obecnie w trakcie
SuccessZadanie zakończono pomyślnie
FailedZadanie nie powiodło się i nie wygenerowano wyniku

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_ERRORPrompt nie przeszedł przeglądu treści
9038PROHIBITED_CONTENTWygenerowany obraz zawiera zakazane treści
9051COINS_NOT_ENOUGHNiewystarczająca liczba kredytów

Pełne definicje wspólnych błędów znajdziesz w Odniesieniu do kodów błędów.