Ideal House
सामग्री पर जाएं

ऑब्जेक्ट रिमूवर API दस्तावेज़ीकरण#

मूल URL: https://api.ideal.house
संस्करण: v1
अपडेटेड: 2026-03-06


📖 अवलोकन#

ऑब्जेक्ट रिमूवर API आपको AI का उपयोग करके इंटीरियर चित्रों से अनावश्यक वस्तुओं या फर्नीचर को हटाने की अनुमति देता है। यह दो मोड का समर्थन करता है:

  • single_furniture — एक विशिष्ट फर्नीशर को हटाने के लिए एक मास्क इमेज प्रदान करें जो लक्ष्य क्षेत्र को चिह्नित करती है। AI हटाए गए क्षेत्र को बुद्धिमानी से भरकर एक साफ, प्राकृतिक दिखने वाला परिणाम उत्पन्न करेगा।
  • whole_house — बिना मास्क की आवश्यकता के पूरे कमरे से सभी फर्नीशर को स्वतः हटाता है।

वर्कफ्लो असिंक्रोनस है और दो चरणों में शामिल है:

  1. टास्क बनाएं — अपनी स्रोत इमेज, मास्क और पैरामीटर सबमिट करें, फिर एक taskId प्राप्त करें।
  2. परिणामों के लिए पोल करेंtaskId का उपयोग करके टास्क स्थिति की जांच करें और परिणामी इमेज प्राप्त करें।

🔐 प्रमाणीकरण#

सभी API रिक्वेस्ट का प्रमाणीकरण API कुंजी का उपयोग करके किया जाना चाहिए।

रिक्वेस्ट हेडर में अपनी API कुंजी शामिल करें:

हेडरमान
APIKEYyour_api_key_here

⚠️ अपनी API कुंजी को सुरक्षित रखें। इसे क्लाइंट-साइड कोड या सार्वजनिक रिपॉज़िटरी में प्रकट न करें।


💰 क्रेडिट विलोपन#

[!WARNING] 🪙 प्रत्येक टास्क सफल टास्क निर्माण पर आपके खाते से 1 क्रेडिट घटाता है। यदि टास्क अंततः विफल होता है, तो घटाए गए क्रेडिट आपके खाते में स्वतः वापस कर दिए जाएंगे।
अपर्याप्त क्रेडिट त्रुटि कोड 9051 लौटाएंगे। 📄 देखें क्रेडिट विलोपन संदर्भ


🖼️ मास्क इमेज फॉर्मेट#

मास्क इमेज स्रोत इमेज से हटाने के क्षेत्र को परिभाषित करती है।

मास्क नियम:

रंगअर्थ
कालाहटाने वाला क्षेत्र (मिटाए जाने वाली वस्तु / क्षेत्र)
सफेदसंरक्षित क्षेत्र (रखने वाली पृष्ठभूमि)

⚠️ मास्क इमेज को स्रोत इमेज (imageUrl) के समान आयामों से मेल खाना चाहिए।

मास्क उदाहरण:

मास्क उदाहरण

मास्क में काला क्षेत्र हटाने वाले फर्नीचर को दर्शाता है; सफेद क्षेत्र पृष्ठभूमि है जिसे संरक्षित किया जाना है।


📌 API एंडपॉइंट#


1. ऑब्जेक्ट रिमूवर कार्य बनाएं#

एक नया AI ऑब्जेक्ट रिमूवल टास्क बनाता है और पोलिंग के लिए एक अद्वितीय taskId लौटाता है।

एंडपॉइंट

सादा पाठ
POST /api/v1/objectRemover/generate

अनुरोध हेडर

हेडरआवश्यकविवरण
APIKEY✅ हाँआपका API प्रमाणीकरण कुंजी
Content-Type✅ हाँapplication/json

अनुरोध बॉडी

फ़ील्डप्रकारआवश्यकविवरण
imageUrlstring✅ हाँस्रोत इमेज का URL
emptyTypestring✅ आवश्यकहटाने का मोड। Enum: whole_house, single_furniture. नियंत्रित करता है कि AI हटाए गए क्षेत्र को कैसे भरता है
maskUrlstring⚠️ emptyType=single_furniture पर आवश्यकमास्क इमेज का URL। काले क्षेत्र हटाए जाएंगे; सफेद क्षेत्र संरक्षित होंगे। केवल single_furniture मोड में प्रभावी होता है
maskBase64string⚠️ emptyType=single_furniture पर आवश्यकBase64-एनकोडेड मास्क इमेज (PNG फॉर्मेट अनुशंसित)। maskUrl का विकल्प। केवल single_furniture मोड में प्रभावी होता है

⚠️ मोड के अनुसार मास्क आवश्यकता:

  • single_furnituremaskUrl या maskBase64 में से कम से कम एक अवश्य प्रदान करना होगा। यदि दोनों दिए जाएं, तो maskUrl प्राथमिकता प्राप्त करेगा।
  • whole_house — मास्क फ़ील्ड को अनदेखा किया जाता है। AI पूरे कमरे से सभी फर्नीचर अपने आप हटा देता है।

🖼️ इमेज आवश्यकताएं: स्रोत इमेज और मास्क को JPG/JPEG, PNG, या WebP का उपयोग करना होगा। प्रत्येक इमेज का आकार 20 MB से अधिक नहीं होना चाहिए, आयाम 128 × 128 px से लेकर 6,000 × 6,000 px (समावेशी) तक होना चाहिए। अधिकतम पिक्सेल आयामों से अधिक इमेजों को प्रोसेसिंग से पहले स्वतः अनुपातिक रूप से छोटा कर दिया जाता है ताकि वे 6,000 × 6,000 px के भीतर फिट हों। इमेज URLs को API सर्वर द्वारा सीधे एक्सेस किया जा सकना चाहिए। Base64 मास्क को डिकोडेड-इमेज सीमाओं के अधीन होना चाहिए और इसमें data-URL प्रीफिक्स शामिल नहीं होना चाहिए।


खाली प्रकार के विकल्प

मानमास्क आवश्यकताविवरण
single_furniture✅ हाँमास्क द्वारा परिभाषित विशिष्ट फर्नीशर को हटाता है और क्षेत्र को प्राकृतिक रूप से भरता है
whole_house❌ नहींपूरे कमरे से सभी फर्नीशर को स्वतः हटाता है — मास्क की आवश्यकता नहीं

📥 अनुरोध उदाहरण#

cURL
bash
# single_furniture mode — mask required (using maskUrl)
curl -X POST "https://api.ideal.house/api/v1/objectRemover/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "imageUrl": "https://example.com/room.jpg",
    "emptyType": "single_furniture",
    "maskUrl": "https://example.com/mask.png"
  }'

# single_furniture mode — mask required (using maskBase64)
curl -X POST "https://api.ideal.house/api/v1/objectRemover/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "imageUrl": "https://example.com/room.jpg",
    "emptyType": "single_furniture",
    "maskBase64": "iVBORw0KGgoAAAANSUhEUgAA..."
  }'

# whole_house mode — no mask needed
curl -X POST "https://api.ideal.house/api/v1/objectRemover/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "imageUrl": "https://example.com/room.jpg",
    "emptyType": "whole_house"
  }'
Java (OkHttp)
java
import okhttp3.*;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Base64;

public class ObjectRemoverApiExample {

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

        // Option 1: Use maskUrl
        String requestBody = """
            {
                "imageUrl": "https://example.com/room.jpg",
                "maskUrl": "https://example.com/mask.png",
                "emptyType": "single_furniture"
            }
            """;

        // Option 2: Use maskBase64 (encode local mask file)
        // byte[] maskBytes = Files.readAllBytes(Path.of("/path/to/mask.png"));
        // String maskBase64 = Base64.getEncoder().encodeToString(maskBytes);
        // String requestBody = """
        //     {
        //         "imageUrl": "https://example.com/room.jpg",
        //         "maskBase64": "%s",
        //         "emptyType": "single_furniture"
        //     }
        //     """.formatted(maskBase64);

        Request request = new Request.Builder()
            .url(BASE_URL + "/api/v1/objectRemover/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
import base64

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

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

# Option 1: Use maskUrl
payload = {
    "imageUrl": "https://example.com/room.jpg",
    "maskUrl": "https://example.com/mask.png",
    "emptyType": "single_furniture"
}

# Option 2: Use maskBase64 (encode local mask file)
# with open("/path/to/mask.png", "rb") as f:
#     mask_base64 = base64.b64encode(f.read()).decode("utf-8")
# payload = {
#     "imageUrl": "https://example.com/room.jpg",
#     "maskBase64": mask_base64,
#     "emptyType": "single_furniture"
# }

response = requests.post(
    f"{BASE_URL}/api/v1/objectRemover/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 fs = require('fs');

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

async function createObjectRemoverTask() {
  try {
    // Option 1: Use maskUrl
    const payload = {
      imageUrl: 'https://example.com/room.jpg',
      maskUrl: 'https://example.com/mask.png',
      emptyType: 'single_furniture'
    };

    // Option 2: Use maskBase64 (encode local mask file)
    // const maskBuffer = fs.readFileSync('/path/to/mask.png');
    // const maskBase64 = maskBuffer.toString('base64');
    // const payload = {
    //   imageUrl: 'https://example.com/room.jpg',
    //   maskBase64: maskBase64,
    //   emptyType: 'single_furniture'
    // };

    const response = await axios.post(
      `${BASE_URL}/api/v1/objectRemover/generate`,
      payload,
      {
        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);
  }
}

createObjectRemoverTask();

📤 प्रतिक्रिया#

सफलता प्रतिक्रिया

json
{
  "code": 0,
  "message": "success",
  "data": 1234567890123456789
}
फ़ील्डप्रकारविवरण
codeinteger0 सफलता संकेत करता है
messagestringप्रतिक्रिया संदेश
datalongपरिणामों के लिए पोलिंग करने हेतु अद्वितीय टास्क आईडी

2. कार्य परिणाम प्राप्त करें#

पहले से बनाए गए ऑब्जेक्ट रिमूवल टास्क की वर्तमान स्थिति और आउटपुट प्राप्त करता है।

एंडपॉइंट

सादा पाठ
GET /api/v1/objectRemover/result

अनुरोध हेडर

हेडरआवश्यकविवरण
APIKEY✅ हाँआपका API प्रमाणीकरण कुंजी

क्वेरी पैरामीटर

पैरामीटरप्रकारआवश्यकविवरण
taskIdlong✅ हाँटास्क बनाए एंडपॉइंट से लौटी टास्क आईडी

📥 अनुरोध उदाहरण#

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

public class ObjectRemoverResultExample {

    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/objectRemover/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/objectRemover/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)  # Poll every 3 seconds

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

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

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

pollResult(1234567890123456789n);

📤 प्रतिक्रिया#

सफलता प्रतिक्रिया (कार्य पूर्ण)

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Success",
    "waitNumber": 0,
    "percentage": 100,
    "input": {
      "imageUrl": "https://example.com/room.jpg",
      "maskUrl": "https://example.com/mask.png",
      "emptyType": "single_furniture"
    },
    "output": {
      "resultUrl": "https://cdn.ideal.house/output/object_remover_result.jpg",
      "width": 1024,
      "height": 1024
    }
  }
}

प्रतिक्रिया (कार्य प्रोसेसिंग / कतार में)

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Processing",
    "waitNumber": 1,
    "percentage": 50,
    "input": {
      "imageUrl": "https://example.com/room.jpg",
      "maskUrl": "https://example.com/mask.png",
      "emptyType": "single_furniture"
    },
    "output": null
  }
}

प्रतिक्रिया (कार्य विफल)

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Failed",
    "waitNumber": 0,
    "percentage": 0,
    "input": {
      "imageUrl": "https://example.com/room.jpg",
      "maskUrl": "https://example.com/mask.png",
      "emptyType": "single_furniture"
    },
    "output": null
  }
}

प्रतिक्रिया फ़ील्ड

फ़ील्डप्रकारविवरण
idlongकार्य अद्वितीय पहचानकर्ता
statusstringवर्तमान कार्य स्थिति (देखें कार्य स्थिति)
waitNumberintegerकतार में आगे कार्य संख्या (0 का अर्थ है वर्तमान में प्रोसेसिंग)
percentageintegerकार्य पूर्णता प्रतिशत (0–100)
inputobjectकार्य के मूल इनपुट पैरामीटर
input.imageUrlstringस्रोत इमेज URL
input.maskUrlstringमास्क इमेज URL (यदि maskUrl के माध्यम से प्रदान किया गया हो)
input.emptyTypestringउपयोग किया गया रिमूवल मोड (single_furniture या whole_house)
outputobjectजनरेशन परिणाम (केवल तब उपलब्ध जब status Success हो)
output.resultUrlstringवस्तु-हटाए गए परिणाम चित्र का URL
output.widthintegerपिक्सेल में आउटपुट चौड़ाई
output.heightintegerपिक्सेल में आउटपुट ऊंचाई

📊 कार्य स्थिति#

स्थितिविवरण
Unprocessedकार्य बनाया गया है लेकिन अभी शुरू नहीं हुआ है
Processingकार्य वर्तमान में प्रोसेस किया जा रहा है
Successकार्य सफलतापूर्वक पूर्ण हुआ — आउटपुट उपलब्ध है
Failedकार्य त्रुटि के कारण विफल हुआ

हर 3-5 सेकंड में पोल करें। देखें API कार्य सीमा


❌ त्रुटि प्रतिक्रियाएँ#

सभी त्रुटि प्रतिक्रियाएँ समान JSON संरचना साझा करती हैं:

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

त्रुटि कोड संदर्भ#

कोडनामविवरणसुझाया गया कार्रवाई
1001FAILEDअनुरोध विफल (सामान्य त्रुटि)विशिष्ट त्रुटि विवरणों के लिए message फ़ील्ड की जांच करें
1003INTERNAL_ERRORआंतरिक सर्वर त्रुटिएक छोटे देरी के बाद पुनः प्रयास करें; यदि यह जारी रहता है तो सहायता से संपर्क करें
1011PARAM_ERRORअनुरोध पैरामीटर त्रुटि — e.g., दोनों maskUrl और maskBase64 अनुपस्थितसुनिश्चित करें कि कम से कम एक मास्क फील्ड प्रदान की गई हो
5002API_KEY_INVALIDअमान्य या अनुपस्थित API कुंजीसुनिश्चित करें कि APIKEY हेडर मौजूद है और मान सही है
9038PROHIBITED_CONTENTजनरेट आउटपुट छवि में प्रतिबंधित सामग्री शामिल हैप्रॉम्प्ट/शैली/इनपुट को समायोजित करें और पुनः प्रयास करें
9051COINS_NOT_ENOUGHअपर्याप्त सिक्के / क्रेडिटअपने खाते के क्रेडिट को टॉप-अप करें और पुनः प्रयास करें

📄 सामान्य API त्रुटि कोडों की पूरी सूची के लिए, त्रुटि कोड संदर्भ का हवाला दें।