स्मार्ट रिप्लेस API दस्तावेज़ीकरण#
मूल URL:
https://api.ideal.house
संस्करण: v1
अपडेटेड: 2026-03-06
📖 अवलोकन#
स्मार्ट रिप्लेस API आपको अपनी टेक्स्ट प्रॉम्प्ट के आधार पर चित्र में चयनित क्षेत्र को AI-जनित सामग्री से बुद्धिमानी से बदलने की अनुमति देता है। आप एक स्रोत चित्र, एक मास्क इमेज जो बदलने वाले क्षेत्र को परिभाषित करती है, और एक टेक्स्ट प्रॉम्प्ट प्रदान करते हैं जो उस क्षेत्र में क्या भरना चाहिए इसका वर्णन करती है। AI जनित सामग्री को मूल चित्र में बेसूत ढंग से मिला देगा। कार्यप्रणाली असमकालीन है और इसमें दो चरण शामिल हैं:
- टास्क बनाएं — अपनी इमेज, मास्क और प्रॉम्प्ट सबमिट करें, फिर एक
taskIdप्राप्त करें। - परिणामों के लिए पोल करें —
taskIdका उपयोग करके टास्क स्थिति की जांच करें और परिणामी इमेज प्राप्त करें।
🔐 प्रमाणीकरण#
सभी API रिक्वेस्ट का प्रमाणीकरण API कुंजी का उपयोग करके किया जाना चाहिए।
रिक्वेस्ट हेडर में अपनी API कुंजी शामिल करें:
| हेडर | मान |
|---|---|
APIKEY | your_api_key_here |
⚠️ अपनी API कुंजी को सुरक्षित रखें। इसे क्लाइंट-साइड कोड या सार्वजनिक रिपॉज़िटरी में प्रकट न करें।
💰 क्रेडिट विलोपन#
[!WARNING] 🪙 प्रत्येक टास्क सफल टास्क निर्माण पर आपके खाते से 1 क्रेडिट घटाता है। यदि टास्क अंततः विफल होता है, तो घटाए गए क्रेडिट आपके खाते में स्वतः वापस कर दिए जाएंगे।
अपर्याप्त क्रेडिट त्रुटि कोड9051लौटाएंगे। 📄 देखें क्रेडिट विलोपन संदर्भ।
🖼️ मास्क इमेज फॉर्मेट#
मास्क इमेज स्रोत चित्र में बदलने वाले क्षेत्र को परिभाषित करती है।
मास्क नियम:
| रंग | अर्थ |
|---|---|
| ⬛ काला | बदलने वाला क्षेत्र (जहाँ नई सामग्री उत्पन्न होगी) |
| ⬜ सफेद | संरक्षित क्षेत्र (अपरिवर्तित रहने वाला पृष्ठभूमि) |
⚠️ मास्क इमेज को स्रोत इमेज (
imageUrl) के समान आयामों से मेल खाना चाहिए।
मास्क उदाहरण:
मास्क में काला क्षेत्र AI द्वारा बदलाव के क्षेत्र को दर्शाता है; सफेद क्षेत्र पृष्ठभूमि है जिसे संरक्षित किया जाना है।
📌 API एंडपॉइंट#
1. स्मार्ट रिप्लेस कार्य बनाएं#
एक नया AI स्मार्ट रिप्लेस कार्य बनाता है और स्थिति की जाँच के लिए एक अद्वितीय taskId लौटाता है।
एंडपॉइंट
POST /api/v1/smartReplace/generate
अनुरोध हेडर
| हेडर | आवश्यक | विवरण |
|---|---|---|
APIKEY | ✅ हाँ | आपका API प्रमाणीकरण कुंजी |
Content-Type | ✅ हाँ | application/json |
अनुरोध बॉडी
| फ़ील्ड | प्रकार | आवश्यक | विवरण |
|---|---|---|---|
imageUrl | string | ✅ हाँ | स्रोत इमेज का URL |
prompt | string | ✅ हाँ | मास्क्ड क्षेत्र में उत्पन्न करने के लिए सामग्री का वर्णन करने वाली टेक्स्ट प्रॉम्प्ट (e.g., "a modern armchair", "marble flooring") |
maskUrl | string | ⚠️ या तो maskUrl या maskBase64 | मास्क इमेज का URL। काले क्षेत्र बदले जाएंगे; सफेद क्षेत्र संरक्षित होंगे |
maskBase64 | string | ⚠️ या तो maskUrl या maskBase64 | Base64-एनकोडेड मास्क इमेज (PNG फॉर्मेट अनुशंसित)। तब उपयोग करें जब आप होस्टेड URL प्रदान नहीं कर सकें |
⚠️
maskUrlयाmaskBase64में से कम से कम एक प्रदान करना आवश्यक है। यदि दोनों दिए जाएं, तोmaskUrlप्राथमिकता प्राप्त करेगा।
🖼️ इमेज आवश्यकताएं: स्रोत इमेज और मास्क को JPG/JPEG, PNG, या WebP का उपयोग करना होगा। प्रत्येक इमेज का आकार 20 MB से अधिक नहीं होना चाहिए, आयाम 128 × 128 px से लेकर 6,000 × 6,000 px (समावेशी) तक होना चाहिए। अधिकतम पिक्सेल आयामों से अधिक इमेजों को प्रोसेसिंग से पहले स्वतः अनुपातिक रूप से छोटा कर दिया जाता है ताकि वे 6,000 × 6,000 px के भीतर फिट हों। इमेज URLs को API सर्वर द्वारा सीधे एक्सेस किया जा सकना चाहिए। Base64 मास्क को डिकोडेड-इमेज सीमाओं के अधीन होना चाहिए और इसमें data-URL प्रीफिक्स शामिल नहीं होना चाहिए।
📥 अनुरोध उदाहरण#
cURL
# Using maskUrl
curl -X POST "https://api.ideal.house/api/v1/smartReplace/generate" \
-H "APIKEY: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"imageUrl": "https://example.com/room.jpg",
"prompt": "a modern velvet sofa in dark blue",
"maskUrl": "https://example.com/mask.png"
}'
# Using maskBase64
curl -X POST "https://api.ideal.house/api/v1/smartReplace/generate" \
-H "APIKEY: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"imageUrl": "https://example.com/room.jpg",
"prompt": "a modern velvet sofa in dark blue",
"maskBase64": "iVBORw0KGgoAAAANSUhEUgAA..."
}'
Java (OkHttp)
import okhttp3.*;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Base64;
public class SmartReplaceApiExample {
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",
"prompt": "a modern velvet sofa in dark blue",
"maskUrl": "https://example.com/mask.png"
}
""";
// 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",
// "prompt": "a modern velvet sofa in dark blue",
// "maskBase64": "%s"
// }
// """.formatted(maskBase64);
Request request = new Request.Builder()
.url(BASE_URL + "/api/v1/smartReplace/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
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",
"prompt": "a modern velvet sofa in dark blue",
"maskUrl": "https://example.com/mask.png"
}
# 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",
# "prompt": "a modern velvet sofa in dark blue",
# "maskBase64": mask_base64
# }
response = requests.post(
f"{BASE_URL}/api/v1/smartReplace/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 fs = require('fs');
const BASE_URL = 'https://api.ideal.house';
const API_KEY = 'your_api_key_here';
async function createSmartReplaceTask() {
try {
// Option 1: Use maskUrl
const payload = {
imageUrl: 'https://example.com/room.jpg',
prompt: 'a modern velvet sofa in dark blue',
maskUrl: 'https://example.com/mask.png'
};
// 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',
// prompt: 'a modern velvet sofa in dark blue',
// maskBase64: maskBase64
// };
const response = await axios.post(
`${BASE_URL}/api/v1/smartReplace/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);
}
}
createSmartReplaceTask();
📤 प्रतिक्रिया#
सफलता प्रतिक्रिया
{
"code": 0,
"message": "success",
"data": 1234567890123456789
}
| फ़ील्ड | प्रकार | विवरण |
|---|---|---|
code | integer | 0 सफलता संकेत करता है |
message | string | प्रतिक्रिया संदेश |
data | long | परिणामों के लिए पोलिंग करने हेतु अद्वितीय टास्क आईडी |
2. कार्य परिणाम प्राप्त करें#
पहले से बनाए गए स्मार्ट रिप्लेस कार्य की वर्तमान स्थिति और आउटपुट प्राप्त करता है।
एंडपॉइंट
GET /api/v1/smartReplace/result
अनुरोध हेडर
| हेडर | आवश्यक | विवरण |
|---|---|---|
APIKEY | ✅ हाँ | आपका API प्रमाणीकरण कुंजी |
क्वेरी पैरामीटर
| पैरामीटर | प्रकार | आवश्यक | विवरण |
|---|---|---|---|
taskId | long | ✅ हाँ | टास्क बनाए एंडपॉइंट से लौटी टास्क आईडी |
📥 अनुरोध उदाहरण#
cURL
curl -X GET "https://api.ideal.house/api/v1/smartReplace/result?taskId=1234567890123456789" \
-H "APIKEY: your_api_key_here"
Java (OkHttp)
import okhttp3.*;
import java.io.IOException;
public class SmartReplaceResultExample {
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/smartReplace/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
# Poll until task is complete
while True:
response = requests.get(
f"{BASE_URL}/api/v1/smartReplace/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)
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/smartReplace/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);
📤 प्रतिक्रिया#
सफलता प्रतिक्रिया (कार्य पूर्ण)
{
"code": 0,
"message": "success",
"data": {
"id": 1234567890123456789,
"status": "Success",
"waitNumber": 0,
"percentage": 100,
"input": {
"imageUrl": "https://example.com/room.jpg",
"prompt": "a modern velvet sofa in dark blue",
"maskUrl": "https://example.com/mask.png"
},
"output": {
"resultUrl": "https://cdn.ideal.house/output/smart_replace_result.jpg",
"width": 1024,
"height": 1024
}
}
}
प्रतिक्रिया (कार्य प्रोसेसिंग / कतार में)
{
"code": 0,
"message": "success",
"data": {
"id": 1234567890123456789,
"status": "Processing",
"waitNumber": 1,
"percentage": 45,
"input": {
"imageUrl": "https://example.com/room.jpg",
"prompt": "a modern velvet sofa in dark blue",
"maskUrl": "https://example.com/mask.png"
},
"output": null
}
}
प्रतिक्रिया (कार्य विफल)
{
"code": 0,
"message": "success",
"data": {
"id": 1234567890123456789,
"status": "Failed",
"waitNumber": 0,
"percentage": 0,
"input": {
"imageUrl": "https://example.com/room.jpg",
"prompt": "a modern velvet sofa in dark blue",
"maskUrl": "https://example.com/mask.png"
},
"output": null
}
}
प्रतिक्रिया फ़ील्ड
| फ़ील्ड | प्रकार | विवरण |
|---|---|---|
id | long | कार्य अद्वितीय पहचानकर्ता |
status | string | वर्तमान कार्य स्थिति (देखें कार्य स्थिति) |
waitNumber | integer | कतार में आगे कार्य संख्या (0 का अर्थ है वर्तमान में प्रोसेसिंग) |
percentage | integer | कार्य पूर्णता प्रतिशत (0–100) |
input | object | कार्य के मूल इनपुट पैरामीटर |
input.imageUrl | string | स्रोत इमेज URL |
input.prompt | string | बदलाव की सामग्री का वर्णन करने वाली टेक्स्ट प्रॉम्प्ट |
input.maskUrl | string | मास्क इमेज URL (यदि maskUrl के माध्यम से प्रदान किया गया हो) |
output | object | जनरेशन परिणाम (केवल तब उपलब्ध जब status Success हो) |
output.resultUrl | string | स्मार्ट-रिप्लेस किए गए परिणाम चित्र का URL |
output.width | integer | पिक्सेल में आउटपुट चौड़ाई |
output.height | integer | पिक्सेल में आउटपुट ऊंचाई |
📊 कार्य स्थिति#
| स्थिति | विवरण |
|---|---|
Unprocessed | कार्य बनाया गया है लेकिन अभी शुरू नहीं हुआ है |
Processing | कार्य वर्तमान में प्रोसेस किया जा रहा है |
Success | कार्य सफलतापूर्वक पूर्ण हुआ — आउटपुट उपलब्ध है |
Failed | कार्य त्रुटि के कारण विफल हुआ |
हर 3-5 सेकंड में पोल करें। देखें API कार्य सीमा।
❌ त्रुटि प्रतिक्रियाएँ#
सभी त्रुटि प्रतिक्रियाएँ समान JSON संरचना साझा करती हैं:
{
"code": 5002,
"message": "Invalid API Key",
"data": null
}
त्रुटि कोड संदर्भ#
| कोड | नाम | विवरण | सुझाया गया कार्रवाई |
|---|---|---|---|
1001 | FAILED | अनुरोध विफल (सामान्य त्रुटि) | विशिष्ट त्रुटि विवरणों के लिए message फ़ील्ड की जांच करें |
1003 | INTERNAL_ERROR | आंतरिक सर्वर त्रुटि | एक छोटे देरी के बाद पुनः प्रयास करें; यदि यह जारी रहता है तो सहायता से संपर्क करें |
1011 | PARAM_ERROR | अनुरोध पैरामीटर त्रुटि — e.g., prompt या मास्क अनुपस्थित | सुनिश्चित करें कि दोनों prompt और कम से कम एक मास्क फील्ड प्रदान की गई हों |
5002 | API_KEY_INVALID | अमान्य या अनुपस्थित API कुंजी | सुनिश्चित करें कि APIKEY हेडर मौजूद है और मान सही है |
9010 | SCAN_TEXT_ERROR | टेक्स्ट प्रॉम्प्ट ने सामग्री समीक्षा में विफलता | संवेदनशील या प्रतिबंधित सामग्री को हटाने के लिए प्रॉम्प्ट को संशोधित करें |
9038 | PROHIBITED_CONTENT | जनरेट आउटपुट छवि में प्रतिबंधित सामग्री शामिल है | प्रॉम्प्ट/शैली/इनपुट को समायोजित करें और पुनः प्रयास करें |
9051 | COINS_NOT_ENOUGH | अपर्याप्त सिक्के / क्रेडिट | अपने खाते के क्रेडिट को टॉप-अप करें और पुनः प्रयास करें |
📄 सामान्य API त्रुटि कोडों की पूरी सूची के लिए, त्रुटि कोड संदर्भ का हवाला दें।
