توثيق API لإنشاء مخططات المنازل#
URL الأساسي:
https://api.ideal.house
الإصدار: v1
آخر تحديث: 2026-06-12
📖 نظرة عامة#
يتيح لك API إنشاء مخططات المنازل إنشاء لوحة عرض لمخطط المنزل بمساعدة الذكاء الاصطناعي استناداً إلى النمط المعماري، والمساحة، والتكوين الهيكلي، وتفضيلات التخطيط الداخلي. عند النجاح في الإنشاء، يُنتج API بالضبط 1 صورة نتيجة مركبة لكل مهمة. تحتوي الصورة على مخططات طوابق 2D متناسقة، وواجهات خارجية، وتصوير واقعي للواجهات الخارجية في لوحة عرض واحدة. يُحفظ النتيجة في output.resultUrl وتُدرج أيضاً كعنصر وحيد في output.resultList. سير العمل غير متزامن ويتكون من خطوتين:
- إنشاء مهمة — قدّم معاملات مخطط منزلك واحصل على
taskId. - استعلم دوريًا عن النتائج — استخدم
taskIdللاستعلام عن حالة المهمة واسترداد الصور المُنشأة.
🔐 المصادقة#
يجب مصادقة جميع طلبات API باستخدام مفتاح API.
تضمّن مفتاح API في رأس الطلب:
| الرأس | القيمة |
|---|---|
APIKEY | your_api_key_here |
⚠️ احفظ مفتاح API بأمان. لا تعرضه في كود الواجهة الأمامية أو المستودعات العامة.
💰 خصم الرصيد#
[!WARNING] 🪙 يتم خصم الرصيد بناءً على
modelTypeالمُحدد عند نجاح إنشاء المهمة. إذا فشلت المهمة في النهاية، فسيتم إرجاع الرصيد المخصوم تلقائيًا إلى حسابك.
سيعيد نقص الرصيد رمز الخطأ9051. 📄 اطّلِع على مرجع خصم الرصيد.
النموذج (modelType) | الرصيد المخصوم |
|---|---|
Base | 10 رصيدًا |
Pro | 20 رصيدًا |
📌 نقاط نهاية API#
1. إنشاء مهمة مخطط منزل#
ينشئ مهمة جديدة لتوليد مخطط منزل بالذكاء الاصطناعي ويعيد taskId فريد للاستعلام عنه.
نقطة النهاية
POST /api/v1/housePlan/generate
رؤوس الطلب
| الرأس | مطلوب | الوصف |
|---|---|---|
APIKEY | ✅ نعم | مفتاح مصادقة API الخاص بك |
Content-Type | ✅ نعم | application/json |
جسم الطلب
| الحقل | النوع | مطلوب | الوصف | الافتراضي |
|---|---|---|---|---|
style | string / null | ✅ مطلوب | الاسم الإنجليزي للنمط المعماري. انظر خيارات الأسلوب | Barndominium |
stories | string | ✅ مطلوب | عدد الطوابق. مجموعة القيم: 1، 2، 3+ | 2 |
bedrooms | string | ✅ مطلوب | عدد غرف النوم. مجموعة القيم: 1، 2، 3، 4، 5+ | 2 |
bathrooms | string | ✅ مطلوب | عدد الحمامات. مجموعة القيم: 1، 1.5، 2، 2.5، 3، 3.5، 4+ | 1 |
totalArea | string | ✅ مطلوب | نطاق المساحة الإجمالية بصيغة min-max unit. انظر خيارات المساحة الإجمالية | 150-200 m² |
garageEnabled | boolean | ✅ مطلوب | هل يتضمن مرآب | false |
garageType | string / null | ⚠️ مشروط | مطلوب عند garageEnabled=true. انظر خيارات نوع المرآب | null |
garageCapacity | string / null | ⚠️ مشروط | مطلوب عند garageEnabled=true. انظر سعة المرآب | null |
basement | string | ✅ مطلوب | نوع القبو. انظر خيارات القبو | None |
roofType | string / null | ❌ غير مطلوب | نوع هيكل السقف. انظر خيارات نوع السقف | null |
outdoorSpaces | array<string> | ❌ غير مطلوب | المساحات الخارجية. انظر خيارات المساحات الخارجية | [] |
layoutConcept | string / null | ❌ غير مطلوب | مفهوم التخطيط الداخلي العام. انظر خيارات مفهوم التخطيط | null |
bedroomAreaRanges | array<object> | ✅ مطلوب | نطاقات مساحة غرف النوم. يجب أن يتطابق الطول مع عدد غرف النوم. انظر نطاقات مساحة غرف النوم | انظر المثال |
bathroomLayouts | array<object> | ✅ مطلوب | خيارات تخطيط الحمامات. يجب أن يكون الطول Math.floor(bathrooms). انظر تخطيطات الحمامات | انظر المثال |
kitchenLayout | string / null | ❌ غير مطلوب | تخطيط المطبخ. انظر خيارات المطبخ | null |
kitchenFeatureOptions | array<string> | ❌ غير مطلوب | ميزات المطبخ الاختيارية. انظر خيارات المطبخ | [] |
keyRooms | string / null | ❌ غير مطلوب | غرف مميزة مفصولة بفاصلة وفراغ. انظر خيارات الغرف الرئيسية | null |
prompt | string | ❌ غير مطلوب | مطالبة نصية مخصصة للتوجيه الإضافي | "" |
refImageUrl | string | ❌ غير مطلوب | URL صورة منزل مرجعية لتوجيه الأسلوب | "" |
modelType | string | ✅ مطلوب | نوع جودة النموذج. مجموعة القيم: Base، Pro. ⚠️ وضع Flash غير مدعوم | Base |
🖼️ متطلبات الصور: يجب أن تستخدم صورة المرجع الاختيارية JPG/JPEG أو PNG أو WebP، وأن لا تتجاوز 20 MB، وأن تكون أبعادها من 128 × 128 بكسل إلى 6,000 × 6,000 بكسل (شاملاً). يتم تصغير الصور التي تتجاوز أقصى أبعاد بكسل تلقائياً لتناسب 6,000 × 6,000 بكسل قبل المعالجة. يجب أن يكون URL الخاص بها قابلاً للوصول المباشر من قبل خادم API.
🎨 خيارات النمط#
| القيمة | الوصف |
|---|---|
Barndominium | الافتراضي. منزل هجين بأسلوب حظيرة معدنية |
Cabin | أسلوب كوخ خشبي ريفي |
Cape Cod | أسلوب تناظري كلاسيكي لنيو إنجلاند |
Coastal | أسلوب مستوحى من الشاطئ، خفيف وهوائيّ |
Colonial | عمارة كولونيالية تناظرية تقليدية |
Contemporary | خطوط نظيفة ومواد عصرية |
Craftsman | تفاصيل مصنوعة يدوياً مع مواد طبيعية |
Farmhouse | أسلوب مزرعة ريفية أمريكية |
French Country | أسلوب فرنسي ريفي أنيق |
Mediterranean | جص دافئ مع عناصر من الفخار |
Mid-Century Modern | حداثة هندسية نظيفة في 1950s–70s |
Modern | تصميم حديث بسيط بخطوط مسطحة/زوايا |
Ranch | تخطيط متشعب لطابق واحد |
Shingle Style | واجهة خارجية مستمرة من ألواح التكسية الخشبية المتراكبة |
Southwestern | أسلوب صحراوي مستوحى من الطوب اللّبِن |
Transitional | مزيج من الطرازات التقليدية والمعاصرة |
Tudor | أسلوب إنجليزي نصف خشبي من العصور الوسطى |
Victorian | أسلوب زخرفي مفعم بالحيوية من القرن 19 |
📐 خيارات المساحة الإجمالية#
تستخدم حقل totalArea الصيغة min-max unit. تستخدم القيم المترية m²؛ والقيم الإمبراطورية تستخدم ft². يجب أن تكون القيمة الدنيا أقل من القيمة القصوى بخطوة واحدة على الأقل.
| الوحدة | الأدنى | الأقصى | الخطوة | مثال |
|---|---|---|---|---|
m² | 50 | 500 | 10 | 150-200 m² |
ft² | 500 | 5000 | 100 | 1500-2000 ft² |
🏠 خيارات نوع السقف#
| القيمة | الوصف |
|---|---|
Gable roof | سقف ذو قمة مثلثة كلاسيكية |
Hip roof | منحدرات على جميع الجوانب الأربعة |
Flat roof | سقف مسطح بميل ضئيل |
Pitched roof | سقف مائل بشكل عام |
🏗️ خيارات القبو#
| القيمة | الوصف |
|---|---|
None | بدون قبو |
Partial | قبو جزئي |
Full | قبو كامل |
🚗 خيارات نوع المرآب#
garageType مطلوب فقط عندما garageEnabled=true؛ وإلا أرسل null.
| القيمة | الوصف |
|---|---|
Detached | مرآب منفصل |
Front Entry | مدخل المرآب مواجه للواجهة الأمامية |
Side Entry | مدخل المرآب مواجه للجانب |
Rear Entry | مدخل المرآب مواجه للخلف |
🚗 سعة المرآب#
garageCapacity مطلوب فقط عندما garageEnabled=true؛ وإلا أرسل null.
| القيمة | الوصف |
|---|---|
1 | مرآب لسيارة واحدة |
2 | مرآب لسيارتين |
3+ | ثلاثة مساحات سيارات أو أكثر |
🌿 خيارات المساحات الخارجية#
يقبل حقل outdoorSpaces مصفوفة من القيم التالية.
| القيمة | الوصف |
|---|---|
Front porch | رواق دخول مغطى في الواجهة الأمامية |
Covered patio | منطقة شرفة خارجية مغطاة |
Deck | سطح خشبي أو مركب |
Balcony | منصة خارجية مرتفعة |
Courtyard | ساحة خارجية محجوبة أو شبه محجوبة |
Breezeway | ممر مغطٍ يربط الهياكل |
Outdoor Kitchen | منطقة طهي وتناول طعام خارجية |
مثال
"outdoorSpaces": ["Front porch", "Deck", "Balcony"]
🏛️ خيارات مفهوم التخطيط#
| القيمة | الوصف |
|---|---|
Open Concept | مساحات معيشة مترابطة مفتوحة التخطيط |
Traditional | غرف مفصولة بحدود محددة |
Split-Level | مستويات أرضية متدرجة بين المناطق |
🛏️ مدى مساحة غرف النوم#
يجب أن يكون حقل bedroomAreaRanges مصفوفة يتطابق طولها مع عدد bedrooms. يستخدم كل عنصر الشكل التالي:
| الحقل | النوع | الوصف |
|---|---|---|
name | string | اسم عرض غرفة النوم، مثلاً Room 1 (Master) |
minArea | string | الحد الأدنى لمساحة غرفة النوم. يجب أن يكون سلسلة رقمية غير سالبة |
maxArea | string | الحد الأقصى لمساحة غرفة النوم. يجب أن يكون أكبر من أو يساوي minArea |
unit | string | وحدة المساحة. مجموعة القيم: m²، ft² |
مثال افتراضي لـ bedrooms="2"
[
{ "name": "Room 1 (Master)", "minArea": "12", "maxArea": "18", "unit": "m²" },
{ "name": "Room 2", "minArea": "10", "maxArea": "14", "unit": "m²" }
]
🛁 تخطيطات الحمامات#
يجب أن يكون حقل bathroomLayouts مصفوفة يكون طولها Math.floor(bathrooms). على سبيل المثال، يتطلب bathrooms="2.5" 2 كائن تخطيط حمام.
| الحقل | النوع | الوصف |
|---|---|---|
name | string | اسم عرض الحمام، مثلاً Bathroom 1 |
layout | string / null | مجموعة القيم: With Wet & Dry Separation، Without Separation، أو null |
مثال افتراضي لـ bathrooms="1"
[
{ "name": "Bathroom 1", "layout": null }
]
🍳 خيارات المطبخ#
تخطيط المطبخ
| القيمة | الوصف |
|---|---|
Open Kitchen | مطبخ مفتوح متصل بمساحة المعيشة/المأدبة |
Closed Kitchen | مساحة مطبخ مغلقة ومنفصلة |
خيارات ميزات المطبخ
| القيمة | الوصف |
|---|---|
Eating Bar | طاولة تناول طعام / مقاعد على سطح المطبخ |
Kitchen Island | جزيرة مطبخ |
Breakfast Nook | زاوية إفطار |
🚪 خيارات الغرف الرئيسية#
يقبل حقل keyRooms قيمة واحدة أو أكثر من القيم التالية. عند اختيار خيارات متعددة، اجمع بينها باستخدام فاصلة (,).
| القيمة | الوصف |
|---|---|
Home Office | مكتب منزلي مخصص أو غرفة دراسة |
Bonus Room | غرفة متعددة الأغراض مرنة |
Media Room | مسرح منزلي أو مركز وسائط |
Mudroom | غرفة دخول للمعدات الخارجية |
Laundry Room | مساحة غسيل مخصصة |
Guest Suite | جناح غرفة نوم للضيوف مستقل |
مثال
"keyRooms": "Home Office, Media Room, Guest Suite"
أنواع النماذج
| القيمة | الوصف |
|---|---|
Base | الافتراضي. توازن بين السرعة والجودة. يولد لوحة عرض مركبة عالية الدقة |
Pro | جودة أعلى وإخراج بدقة أعلى، أبطأ |
⚠️ ملاحظة: وضع
Flashغير متوفر لهذا API. يدعم فقطBaseوPro.
📥 أمثلة الطلب#
cURL
# Basic request with default values
curl -X POST "https://api.ideal.house/api/v1/housePlan/generate" \
-H "APIKEY: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"style": "Barndominium",
"stories": "2",
"bedrooms": "2",
"bathrooms": "1",
"totalArea": "150-200 m²",
"garageEnabled": false,
"garageType": null,
"garageCapacity": null,
"basement": "None",
"roofType": null,
"outdoorSpaces": [],
"layoutConcept": null,
"bedroomAreaRanges": [
{ "name": "Room 1 (Master)", "minArea": "12", "maxArea": "18", "unit": "m²" },
{ "name": "Room 2", "minArea": "10", "maxArea": "14", "unit": "m²" }
],
"bathroomLayouts": [
{ "name": "Bathroom 1", "layout": null }
],
"kitchenLayout": null,
"kitchenFeatureOptions": [],
"keyRooms": null,
"prompt": "",
"refImageUrl": "",
"modelType": "Base"
}'
# Pro model with reference image and custom prompt
curl -X POST "https://api.ideal.house/api/v1/housePlan/generate" \
-H "APIKEY: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"style": "Victorian",
"stories": "3+",
"bedrooms": "5+",
"bathrooms": "4+",
"totalArea": "300-380 m²",
"garageEnabled": true,
"garageType": "Front Entry",
"garageCapacity": "3+",
"basement": "Full",
"roofType": "Gable roof",
"outdoorSpaces": ["Front porch", "Balcony", "Courtyard", "Outdoor Kitchen"],
"layoutConcept": "Traditional",
"bedroomAreaRanges": [
{ "name": "Room 1 (Master)", "minArea": "18", "maxArea": "28", "unit": "m²" },
{ "name": "Room 2", "minArea": "12", "maxArea": "16", "unit": "m²" },
{ "name": "Room 3", "minArea": "12", "maxArea": "16", "unit": "m²" },
{ "name": "Room 4", "minArea": "10", "maxArea": "14", "unit": "m²" },
{ "name": "Room 5", "minArea": "10", "maxArea": "14", "unit": "m²" }
],
"bathroomLayouts": [
{ "name": "Bathroom 1", "layout": "With Wet & Dry Separation" },
{ "name": "Bathroom 2", "layout": "With Wet & Dry Separation" },
{ "name": "Bathroom 3", "layout": "Without Separation" },
{ "name": "Bathroom 4", "layout": null }
],
"kitchenLayout": "Closed Kitchen",
"kitchenFeatureOptions": ["Kitchen Island", "Breakfast Nook"],
"keyRooms": "Home Office, Bonus Room, Media Room, Guest Suite",
"prompt": "Grand Victorian mansion with ornate details and wraparound porch",
"refImageUrl": "https://example.com/reference-house.jpg",
"modelType": "Pro"
}'
Java (OkHttp)
import okhttp3.*;
import java.io.IOException;
public class HousePlanApiExample {
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 = """
{
"style": "Barndominium",
"stories": "2",
"bedrooms": "2",
"bathrooms": "1",
"totalArea": "150-200 m²",
"garageEnabled": false,
"garageType": null,
"garageCapacity": null,
"basement": "None",
"roofType": null,
"outdoorSpaces": [],
"layoutConcept": null,
"bedroomAreaRanges": [
{ "name": "Room 1 (Master)", "minArea": "12", "maxArea": "18", "unit": "m²" },
{ "name": "Room 2", "minArea": "10", "maxArea": "14", "unit": "m²" }
],
"bathroomLayouts": [
{ "name": "Bathroom 1", "layout": null }
],
"kitchenLayout": null,
"kitchenFeatureOptions": [],
"keyRooms": null,
"prompt": "",
"refImageUrl": "",
"modelType": "Base"
}
""";
Request request = new Request.Builder()
.url(BASE_URL + "/api/v1/housePlan/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 = {
"style": "Barndominium",
"stories": "2",
"bedrooms": "2",
"bathrooms": "1",
"totalArea": "150-200 m²",
"garageEnabled": False,
"garageType": None,
"garageCapacity": None,
"basement": "None",
"roofType": None,
"outdoorSpaces": [],
"layoutConcept": None,
"bedroomAreaRanges": [
{ "name": "Room 1 (Master)", "minArea": "12", "maxArea": "18", "unit": "m²" },
{ "name": "Room 2", "minArea": "10", "maxArea": "14", "unit": "m²" }
],
"bathroomLayouts": [
{ "name": "Bathroom 1", "layout": None }
],
"kitchenLayout": None,
"kitchenFeatureOptions": [],
"keyRooms": None,
"prompt": "",
"refImageUrl": "",
"modelType": "Base"
}
response = requests.post(
f"{BASE_URL}/api/v1/housePlan/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 createHousePlanTask() {
try {
const response = await axios.post(
`${BASE_URL}/api/v1/housePlan/generate`,
{
style: 'Barndominium',
stories: '2',
bedrooms: '2',
bathrooms: '1',
totalArea: '150-200 m²',
garageEnabled: false,
garageType: null,
garageCapacity: null,
basement: 'None',
roofType: null,
outdoorSpaces: [],
layoutConcept: null,
bedroomAreaRanges: [
{ name: 'Room 1 (Master)', minArea: '12', maxArea: '18', unit: 'm²' },
{ name: 'Room 2', minArea: '10', maxArea: '14', unit: 'm²' }
],
bathroomLayouts: [
{ name: 'Bathroom 1', layout: null }
],
kitchenLayout: null,
kitchenFeatureOptions: [],
keyRooms: null,
prompt: '',
refImageUrl: '',
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);
}
}
createHousePlanTask();
📤 الاستجابة#
استجابة النجاح
{
"code": 0,
"message": "success",
"data": 1234567890123456789
}
| الحقل | النوع | الوصف |
|---|---|---|
code | integer | يشير 0 إلى النجاح |
message | string | رسالة الاستجابة |
data | long | معرف المهمة الفريد للاستعلام عن النتائج |
2. استرداد نتيجة المهمة#
يسترجع الحالة والإخراج الحالية لمهمة مخطط منزل تم إنشاؤها سابقاً.
نقطة النهاية
GET /api/v1/housePlan/result
رؤوس الطلب
| الرأس | مطلوب | الوصف |
|---|---|---|
APIKEY | ✅ نعم | مفتاح مصادقة API الخاص بك |
معاملات الاستعلام
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
taskId | long | ✅ نعم | معرف المهمة الذي تمت إعادته من نقطة النهاية لإنشاء المهمة |
📥 أمثلة الطلب#
cURL
curl -X GET "https://api.ideal.house/api/v1/housePlan/result?taskId=1234567890123456789" \
-H "APIKEY: your_api_key_here"
Java (OkHttp)
import okhttp3.*;
import java.io.IOException;
public class HousePlanResultExample {
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/housePlan/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/housePlan/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", "Termination"):
break
time.sleep(3) # Poll every 3 seconds
if status == "Success":
output = result["output"]
print("Composite Result URL:", output["resultUrl"])
print("Result List:", output.get("resultList", []))
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/housePlan/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', 'Termination'].includes(status)) {
if (status === 'Success') {
console.log('Composite Result URL:', result.output.resultUrl);
console.log('Result List:', result.output.resultList);
} else {
console.log('Task ended with status:', status);
}
break;
}
// Wait 3 seconds before next poll
await new Promise(resolve => setTimeout(resolve, 3000));
}
}
pollResult(1234567890123456789n);
📤 الاستجابة#
📸 ملاحظة: يُنتج هذا API بالضبط 1 صورة نتيجة مركبة لكل مهمة ناجحة. تدمج الصورة مخططات الطوابق 2D، والواجهات الخارجية، والتصوير الواقعي للواجهات الخارجية في لوحة عرض واحدة. يحتوي
output.resultUrlعلى URL صورة مركبة، ويحتويoutput.resultListعلى نفس URL كمصفوفة ذات عنصر واحد للتوافق.
استجابة النجاح (اكتمال المهمة)
{
"code": 0,
"message": "success",
"data": {
"id": 1234567890123456789,
"status": "Success",
"waitNumber": 0,
"percentage": 100,
"input": {
"style": "Barndominium",
"stories": "2",
"bedrooms": "2",
"bathrooms": "1",
"totalArea": "150-200 m²",
"garageEnabled": false,
"garageType": null,
"garageCapacity": null,
"basement": "None",
"roofType": null,
"outdoorSpaces": [],
"layoutConcept": null,
"bedroomAreaRanges": [
{ "name": "Room 1 (Master)", "minArea": "12", "maxArea": "18", "unit": "m²" },
{ "name": "Room 2", "minArea": "10", "maxArea": "14", "unit": "m²" }
],
"bathroomLayouts": [
{ "name": "Bathroom 1", "layout": null }
],
"kitchenLayout": null,
"kitchenFeatureOptions": [],
"keyRooms": null,
"prompt": "",
"refImageUrl": "",
"modelType": "Base"
},
"output": {
"resultUrl": "https://cdn.ideal.house/output/house_plan_composite.jpg",
"resultList": [
"https://cdn.ideal.house/output/house_plan_composite.jpg"
],
"width": 2560,
"height": 1440
}
}
}
استجابة (معالجة المهمة / في الطابور)
{
"code": 0,
"message": "success",
"data": {
"id": 1234567890123456789,
"status": "Processing",
"waitNumber": 1,
"percentage": 45,
"input": {
"style": "Barndominium",
"stories": "2",
"bedrooms": "2",
"bathrooms": "1",
"totalArea": "150-200 m²",
"garageEnabled": false,
"garageType": null,
"garageCapacity": null,
"basement": "None",
"roofType": null,
"outdoorSpaces": [],
"layoutConcept": null,
"bedroomAreaRanges": [
{ "name": "Room 1 (Master)", "minArea": "12", "maxArea": "18", "unit": "m²" },
{ "name": "Room 2", "minArea": "10", "maxArea": "14", "unit": "m²" }
],
"bathroomLayouts": [
{ "name": "Bathroom 1", "layout": null }
],
"kitchenLayout": null,
"kitchenFeatureOptions": [],
"keyRooms": null,
"prompt": "",
"refImageUrl": "",
"modelType": "Base"
},
"output": null
}
}
استجابة (فشل المهمة)
{
"code": 0,
"message": "success",
"data": {
"id": 1234567890123456789,
"status": "Failed",
"waitNumber": 0,
"percentage": 0,
"input": {
"style": "Barndominium",
"stories": "2",
"bedrooms": "2",
"bathrooms": "1",
"totalArea": "150-200 m²",
"garageEnabled": false,
"basement": "None",
"modelType": "Base"
},
"output": null
}
}
حقول الاستجابة
| الحقل | النوع | الوصف |
|---|---|---|
id | long | معرّف المهمة الفريد |
status | string | حالة المهمة الحالية (اطّلِع على حالة المهمة) |
waitNumber | integer | عدد المهام التي تسبق هذه المهمة في الطابور (يعني 0 المعالجة حاليًا) |
percentage | integer | نسبة اكتمال المهمة (0–100) |
input | object | معاملات الإدخال الأصلية للمهمة |
input.style | string | النمط المعماري |
input.totalArea | string | نطاق المساحة الإجمالية |
input.stories | string | عدد الطوابق |
input.bedrooms | string | عدد غرف النوم |
input.bathrooms | string | عدد الحمامات |
input.garageEnabled | boolean | هل تم طلب مرآب |
input.garageType | string / null | نوع المرآب |
input.garageCapacity | string / null | عدد مساحات المرآب |
input.basement | string | نوع القبو |
input.roofType | string | نوع السقف |
input.outdoorSpaces | array<string> | المساحات الخارجية |
input.layoutConcept | string | مفهوم التخطيط العام |
input.bedroomAreaRanges | array<object> | نطاقات مساحة غرف النوم |
input.bathroomLayouts | array<object> | خيارات تخطيط الحمامات |
input.kitchenLayout | string | أسلوب تخطيط المطبخ |
input.kitchenFeatureOptions | array<string> | ميزات المطبخ الاختيارية |
input.keyRooms | string | غرف مميزة رئيسية (مفصولة بفواصل) |
input.prompt | string | مطالبة نصية مخصصة (إن وُجدت) |
input.refImageUrl | string | URL صورة مرجعية (إن وُجدت) |
input.modelType | string | نوع النموذج المستخدم |
output | object | نتيجة التوليد (متاحة فقط عندما يكون status هو Success) |
output.resultUrl | string | URL إلى لوحة عرض مخطط المنزل المركبة المُنشأة |
output.resultList | array<string> | URLs إلى صور النتائج المُنشأة. بالنسبة لـ إنشاء مخططات المنازل، تكون عادة مصفوفة ذات عنصر واحد تحتوي على نفس URL مثل output.resultUrl |
output.width | integer | عرض الإخراج بالبكسل |
output.height | integer | ارتفاع الإخراج بالبكسل |
📊 حالة المهمة#
| الحالة | الوصف |
|---|---|
Unprocessed | تم إنشاء المهمة ولكن لم تبدأ بعد |
Processing | تتم معالجة المهمة حاليًا |
Success | اكتملت المهمة بنجاح — الإخراج متاح |
Failed | فشلت المهمة بسبب خطأ |
Termination | تم قطع المهمة أو إنهاؤها |
استعلم كل 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 الشائعة، راجع مرجع رموز الخطأ.