توثيق API لتجديد الواجهات الخارجية#
URL الأساسي:
https://api.ideal.house
الإصدار: v1
آخر تحديث: 2026-05-20
📖 نظرة عامة#
تتيح لك API تجديد الواجهات الخارجية ترميم المظهر الخارجي لمبنى أو إعادة تصميمه انطلاقًا من صورة. قدّم صورة مصدر، ويمكنك اختياريًا إضافة توجيه نصي أو صورة مرجعية أو نمط للمبنى أو تفضيل للبيئة لتوجيه نتيجة التجديد.
سير العمل غير متزامن ويتكون من خطوتين:
- إنشاء مهمة — أرسل صورتك الخارجية والإرشادات الاختيارية، ثم احصل على
taskId. - الاستعلام عن النتائج — استخدم
taskIdللاستفسار عن حالة المهمة واسترجاع الصورة المُنشأة.
🔐 المصادقة#
يجب مصادقة جميع طلبات API باستخدام مفتاح API.
تضمّن مفتاح API في رأس الطلب:
| الرأس | القيمة |
|---|---|
APIKEY | your_api_key_here |
⚠️ احفظ مفتاح API بأمان. لا تعرضه في كود الواجهة الأمامية أو المستودعات العامة.
💰 خصم الرصيد#
[!WARNING] 🪙 يُخصم 1 رصيد عند إنشاء المهمة بنجاح. إذا فشلت المهمة في النهاية، يُعاد الرصيد المخصوم إلى حسابك تلقائيًا.
سيعيد نقص الرصيد رمز الخطأ9051. 📄 راجع مرجع خصم الرصيد.
| العملية | الرصيد المخصوم |
|---|---|
| مهمة تجديد الواجهات الخارجية | 1 رصيد |
للحصول على قواعد الرصيد التفصيلية، راجع مرجع خصم الرصيد.
📌 نقاط نهاية API#
1. إنشاء مهمة تجديد للواجهات الخارجية#
يُنشئ مهمة تجديد خارجية جديدة ويعيد taskId فريدًا للاستعلام.
نقطة النهاية
POST /api/v1/exteriorRenovator/generate
رؤوس الطلب
| الرأس | مطلوب | الوصف |
|---|---|---|
APIKEY | ✅ نعم | مفتاح مصادقة API الخاص بك |
Content-Type | ✅ نعم | application/json |
جسم الطلب
| الحقل | النوع | مطلوب | الوصف |
|---|---|---|---|
imageUrl | string | ✅ نعم | URL صورة المصدر الخارجية المراد تجديدها |
prompt | string | ❌ اختياري | إرشاد نصي اختياري لنتيجة التجديد |
referenceUrl | string | ❌ اختياري | URL صورة مرجعية اختيارية لتوجيه النمط البصري |
buildingStyleId | string | ❌ اختياري | معرف نمط المبنى الاختياري |
environmentId | string | ❌ اختياري | معرف نمط البيئة أو المشهد الاختياري. يدعم عدة معرّفات مفصولة بفاصلة، مثل id1,id2 |
⚠️ فقط
imageUrlمطلوب. جميع حقول جسم الطلب الأخرى اختيارية.
🖼️ متطلبات الصور: يجب أن تستخدم جميع صور المصدر والمرجع JPG/JPEG أو PNG أو WebP. ألا يتجاوز حجم كل صورة 20 ميجابايت، وأن تكون الأبعاد من 128 × 128 بكسل إلى 6,000 × 6,000 بكسل (شاملًا). يتم تصغير الصور التي تتجاوز أبعاد البكسل القصوى تلقائيًا بشكل متناسب لتناسب 6,000 × 6,000 بكسل قبل المعالجة. يجب أن تكون URLs الصور مباشرةً قابلة للوصول من قبل خوادم API.
🎨 خيارات النمط#
يمكن اختيار buildingStyleId وenvironmentId من نقطة نهاية إعدادات نمط API.
الاستخدام:
GET /api/v1/style/exterior_renovator/getStyles
| مجموعة النمط | حقل الطلب | الوصف |
|---|---|---|
buildingStyle | buildingStyleId | خيار نمط المبنى |
environment | environmentId | خيار البيئة أو المشهد. يدعم عدة معرفات خيارات مفصولة بفاصلة، مثل id1,id2 |
يحتوي كل خيار على name وid وurl. مرر id الخيار إلى حقل الطلب المقابل.
📥 أمثلة الطلب#
cURL
# Minimal request
curl -X POST "https://api.ideal.house/api/v1/exteriorRenovator/generate" \
-H "APIKEY: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"imageUrl": "https://example.com/exterior.jpg"
}'
# Request with optional guidance
curl -X POST "https://api.ideal.house/api/v1/exteriorRenovator/generate" \
-H "APIKEY: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"imageUrl": "https://example.com/exterior.jpg",
"prompt": "Modern farmhouse exterior with warm wood accents, black window frames, and clean landscaping",
"referenceUrl": "https://example.com/reference-house.jpg",
"buildingStyleId": "modern-farmhouse",
"environmentId": "Architecture_Enviroment_Time_Night,Architecture_Enviroment_Time_Day"
}'
Java (OkHttp)
import okhttp3.*;
import java.io.IOException;
public class ExteriorRenovatorApiExample {
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/exterior.jpg",
"prompt": "Modern farmhouse exterior with warm wood accents, black window frames, and clean landscaping",
"referenceUrl": "https://example.com/reference-house.jpg",
"buildingStyleId": "modern-farmhouse",
"environmentId": "Architecture_Enviroment_Time_Night,Architecture_Enviroment_Time_Day"
}
""";
Request request = new Request.Builder()
.url(BASE_URL + "/api/v1/exteriorRenovator/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/exterior.jpg",
"prompt": "Modern farmhouse exterior with warm wood accents, black window frames, and clean landscaping",
"referenceUrl": "https://example.com/reference-house.jpg",
"buildingStyleId": "modern-farmhouse",
"environmentId": "Architecture_Enviroment_Time_Night,Architecture_Enviroment_Time_Day"
}
response = requests.post(
f"{BASE_URL}/api/v1/exteriorRenovator/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 createExteriorRenovatorTask() {
try {
const response = await axios.post(
`${BASE_URL}/api/v1/exteriorRenovator/generate`,
{
imageUrl: 'https://example.com/exterior.jpg',
prompt: 'Modern farmhouse exterior with warm wood accents, black window frames, and clean landscaping',
referenceUrl: 'https://example.com/reference-house.jpg',
buildingStyleId: 'modern-farmhouse',
environmentId: 'Architecture_Enviroment_Time_Night,Architecture_Enviroment_Time_Day'
},
{
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);
}
}
createExteriorRenovatorTask();
📤 الاستجابة#
استجابة النجاح
{
"code": 0,
"message": "success",
"data": 1234567890123456789
}
| الحقل | النوع | الوصف |
|---|---|---|
code | integer | يشير 0 إلى النجاح |
message | string | رسالة الاستجابة |
data | long | معرف المهمة الفريد للاستعلام عن النتائج |
2. استرداد نتيجة المهمة#
يسترجع الحالة الحالية وإخراج مهمة تجديد للواجهات الخارجية تم إنشاؤها سابقًا.
نقطة النهاية
GET /api/v1/exteriorRenovator/result
رؤوس الطلب
| الرأس | مطلوب | الوصف |
|---|---|---|
APIKEY | ✅ نعم | مفتاح مصادقة API الخاص بك |
معاملات الاستعلام
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
taskId | long | ✅ نعم | معرف المهمة الذي تمت إعادته من نقطة النهاية لإنشاء المهمة |
📥 أمثلة الطلب#
cURL
curl -X GET "https://api.ideal.house/api/v1/exteriorRenovator/result?taskId=1234567890123456789" \
-H "APIKEY: your_api_key_here"
Java (OkHttp)
import okhttp3.*;
import java.io.IOException;
public class ExteriorRenovatorResultExample {
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/exteriorRenovator/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/exteriorRenovator/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 failed")
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/exteriorRenovator/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 failed');
}
break;
}
await new Promise(resolve => setTimeout(resolve, 3000));
}
}
pollResult(1234567890123456789);
📤 الاستجابة#
استجابة النجاح (اكتمال المهمة)
{
"code": 0,
"message": "success",
"data": {
"id": 1234567890123456789,
"status": "Success",
"waitNumber": 0,
"percentage": 100,
"input": {
"imageUrl": "https://example.com/exterior.jpg",
"prompt": "Modern farmhouse exterior with warm wood accents, black window frames, and clean landscaping",
"refImageUrl": "https://example.com/reference-house.jpg",
"buildingStyleId": "modern-farmhouse",
"environmentId": "Architecture_Enviroment_Time_Night,Architecture_Enviroment_Time_Day"
},
"output": {
"resultUrl": "https://cdn.ideal.house/output/exterior_renovator_result.jpg",
"width": 1024,
"height": 1024
}
}
}
استجابة (معالجة المهمة / في الطابور)
{
"code": 0,
"message": "success",
"data": {
"id": 1234567890123456789,
"status": "Processing",
"waitNumber": 1,
"percentage": 50,
"input": {
"imageUrl": "https://example.com/exterior.jpg"
},
"output": null
}
}
استجابة (فشل المهمة)
{
"code": 0,
"message": "success",
"data": {
"id": 1234567890123456789,
"status": "Failed",
"waitNumber": 0,
"percentage": 0,
"input": {
"imageUrl": "https://example.com/exterior.jpg"
},
"output": null
}
}
حقول الاستجابة
| الحقل | النوع | الوصف |
|---|---|---|
id | long | معرّف المهمة الفريد |
status | string | حالة المهمة الحالية (اطّلِع على حالة المهمة) |
waitNumber | integer | عدد المهام التي تسبق هذه المهمة في الطابور (يعني 0 المعالجة حاليًا) |
percentage | integer | نسبة اكتمال المهمة (0–100) |
input | object | معاملات الإدخال الأصلية للمهمة |
input.imageUrl | string | URL صورة المصدر الخارجية |
input.prompt | string | إرشاد نصي اختياري، إذا تم تقديمه |
input.refImageUrl | string | URL صورة مرجعية اختيارية، إذا تم تقديمها |
input.buildingStyleId | string | معرف نمط المبنى الاختياري، إذا تم تقديمه |
input.environmentId | string | معرف نمط البيئة أو المشهد الاختياري، إذا تم تقديمه. قد يحتوي على عدة معرفات مفصولة بفاصلة |
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 | خطأ في معلمة الطلب | تأكد من تنسيق معاملات الطلب بشكل صحيح |
5002 | API_KEY_INVALID | مفتاح API غير صالح أو مفقود | تأكد من وجود رأس APIKEY وأن القيمة صحيحة |
9010 | SCAN_TEXT_ERROR | فشل مراجعة محتوى مطالبة النص | عدّل المطالبة لإزالة أي محتوى حساس أو محظور |
9038 | PROHIBITED_CONTENT | تحتوي صورة الإخراج المُولَّدة على محتوى محظور | عدّل التوجيه النصي/النمط/الإدخالات وأعد المحاولة |
9051 | COINS_NOT_ENOUGH | عملات / رصيد غير كافٍ | قم بتعبئة رصيد حسابك وأعد المحاولة. اطّلِع على مرجع خصم الرصيد |
📄 للحصول على القائمة الكاملة لرموز خطأ API الشائعة، راجع مرجع رموز الخطأ.