Docs

API Documentation

Home Decor API Documentation

Base URL: https://api.ideal.house
Version: v1
Updated: 2026-05-21


ЁЯУЦ Overview

The Home Decor API generates decoration ideas for an interior image. It supports optional text guidance, a reference image, style selections, and model modes.

The workflow is asynchronous:

  1. Create a task тАФ Submit imageUrl and optional parameters, then receive a taskId.
  2. Poll for results тАФ Use taskId to retrieve task status and the generated image.

ЁЯФР Authentication

HeaderValue
APIKEYyour_api_key_here

ЁЯТ░ Credits Deduction

[!WARNING] Credits are deducted when a task is successfully created. If the task ultimately fails, deducted credits will be automatically refunded.
Insufficient credits will return error code 9051. See Credits Deduction Reference.

Model (modelType)Credits Deducted
Base3 credits
Pro10 credits

If modelType is not provided, Base is used by default.


ЁЯОи Style Options

This API supports optional style parameters returned by the API Style Config endpoint.

Use:

GET /api/v1/style/home_decor_ideas/getStyles
Style GroupRequest FieldDescription
spaceTypespaceStyleIdSpace or room type option
decorStylehomeDecorStyleIdDecoration style option

Each option contains name, id, and url. Pass the option id into the corresponding request field.


ЁЯУМ API Endpoints

1. Create Home Decor Task

Endpoint

POST /api/v1/homeDecor/generate

Request Headers

HeaderRequiredDescription
APIKEYтЬЕ YesYour API authentication key
Content-TypeтЬЕ Yesapplication/json

Request Body

FieldTypeRequiredDescription
imageUrlstringтЬЕ YesURL of the source interior image
referenceUrlstringтЭМ OptionalReference image URL to guide decoration style
spaceStyleIdstringтЭМ OptionalSpace type ID from spaceType style options
homeDecorStyleIdstringтЭМ OptionalDecor style ID from decorStyle style options
promptstringтЭМ OptionalText guidance for the desired result
modelTypestringтЭМ OptionalEnum: Base, Pro. Defaults to Base

Only imageUrl is required. All other fields are optional.

ЁЯУе Request Examples

cURL

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)

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)

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)

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

ЁЯУд Response

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

2. Get Task Result

Endpoint

GET /api/v1/homeDecor/result

Request Headers

HeaderRequiredDescription
APIKEYтЬЕ YesYour API authentication key

Query Parameters

ParameterTypeRequiredDescription
taskIdlongтЬЕ YesTask ID returned by the create endpoint

ЁЯУе Request Examples

cURL

curl -X GET "https://api.ideal.house/api/v1/homeDecor/result?taskId=1234567890123456789" \
  -H "APIKEY: your_api_key_here"

Java (OkHttp)

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)

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)

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

ЁЯУд Response Example

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

Response (Task Processing / In Queue)

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

Response (Task Failed)

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

ЁЯУК Task Status

StatusDescription
UnprocessedTask has been created and is waiting in queue
ProcessingTask is currently running
SuccessTask completed successfully
FailedTask failed and no output was produced

Poll every 3-5 seconds. See API Task Limit.


тЭМ Error Responses

CodeNameDescription
1011PARAM_ERRORRequest parameter error
5002API_KEY_INVALIDInvalid or missing API key
9010SCAN_TEXT_ERRORPrompt failed content review
9038PROHIBITED_CONTENTGenerated image contains prohibited content
9051COINS_NOT_ENOUGHInsufficient credits

For full common error definitions, see Error Code Reference.