Ideal House
تخطّي إلى المحتوى

توثيق API لإنشاء مخططات المنازل#

URL الأساسي: https://api.ideal.house
الإصدار: v1
آخر تحديث: 2026-06-12


📖 نظرة عامة#

يتيح لك API إنشاء مخططات المنازل إنشاء لوحة عرض لمخطط المنزل بمساعدة الذكاء الاصطناعي استناداً إلى النمط المعماري، والمساحة، والتكوين الهيكلي، وتفضيلات التخطيط الداخلي. عند النجاح في الإنشاء، يُنتج API بالضبط 1 صورة نتيجة مركبة لكل مهمة. تحتوي الصورة على مخططات طوابق 2D متناسقة، وواجهات خارجية، وتصوير واقعي للواجهات الخارجية في لوحة عرض واحدة. يُحفظ النتيجة في output.resultUrl وتُدرج أيضاً كعنصر وحيد في output.resultList. سير العمل غير متزامن ويتكون من خطوتين:

  1. إنشاء مهمة — قدّم معاملات مخطط منزلك واحصل على taskId.
  2. استعلم دوريًا عن النتائج — استخدم taskId للاستعلام عن حالة المهمة واسترداد الصور المُنشأة.

🔐 المصادقة#

يجب مصادقة جميع طلبات API باستخدام مفتاح API.

تضمّن مفتاح API في رأس الطلب:

الرأسالقيمة
APIKEYyour_api_key_here

⚠️ احفظ مفتاح API بأمان. لا تعرضه في كود الواجهة الأمامية أو المستودعات العامة.


💰 خصم الرصيد#

[!WARNING] 🪙 يتم خصم الرصيد بناءً على modelType المُحدد عند نجاح إنشاء المهمة. إذا فشلت المهمة في النهاية، فسيتم إرجاع الرصيد المخصوم تلقائيًا إلى حسابك.
سيعيد نقص الرصيد رمز الخطأ 9051. 📄 اطّلِع على مرجع خصم الرصيد.

النموذج (modelType)الرصيد المخصوم
Base10 رصيدًا
Pro20 رصيدًا

📌 نقاط نهاية API#


1. إنشاء مهمة مخطط منزل#

ينشئ مهمة جديدة لتوليد مخطط منزل بالذكاء الاصطناعي ويعيد taskId فريد للاستعلام عنه.

نقطة النهاية

نص عادي
POST /api/v1/housePlan/generate

رؤوس الطلب

الرأسمطلوبالوصف
APIKEY✅ نعممفتاح مصادقة API الخاص بك
Content-Type✅ نعمapplication/json

جسم الطلب

الحقلالنوعمطلوبالوصفالافتراضي
stylestring / null✅ مطلوبالاسم الإنجليزي للنمط المعماري. انظر خيارات الأسلوبBarndominium
storiesstring✅ مطلوبعدد الطوابق. مجموعة القيم: 1، 2، 3+2
bedroomsstring✅ مطلوبعدد غرف النوم. مجموعة القيم: 1، 2، 3، 4، 5+2
bathroomsstring✅ مطلوبعدد الحمامات. مجموعة القيم: 1، 1.5، 2، 2.5، 3، 3.5، 4+1
totalAreastring✅ مطلوبنطاق المساحة الإجمالية بصيغة min-max unit. انظر خيارات المساحة الإجمالية150-200 m²
garageEnabledboolean✅ مطلوبهل يتضمن مرآبfalse
garageTypestring / null⚠️ مشروطمطلوب عند garageEnabled=true. انظر خيارات نوع المرآبnull
garageCapacitystring / null⚠️ مشروطمطلوب عند garageEnabled=true. انظر سعة المرآبnull
basementstring✅ مطلوبنوع القبو. انظر خيارات القبوNone
roofTypestring / null❌ غير مطلوبنوع هيكل السقف. انظر خيارات نوع السقفnull
outdoorSpacesarray<string>❌ غير مطلوبالمساحات الخارجية. انظر خيارات المساحات الخارجية[]
layoutConceptstring / null❌ غير مطلوبمفهوم التخطيط الداخلي العام. انظر خيارات مفهوم التخطيطnull
bedroomAreaRangesarray<object>✅ مطلوبنطاقات مساحة غرف النوم. يجب أن يتطابق الطول مع عدد غرف النوم. انظر نطاقات مساحة غرف النومانظر المثال
bathroomLayoutsarray<object>✅ مطلوبخيارات تخطيط الحمامات. يجب أن يكون الطول Math.floor(bathrooms). انظر تخطيطات الحماماتانظر المثال
kitchenLayoutstring / null❌ غير مطلوبتخطيط المطبخ. انظر خيارات المطبخnull
kitchenFeatureOptionsarray<string>❌ غير مطلوبميزات المطبخ الاختيارية. انظر خيارات المطبخ[]
keyRoomsstring / null❌ غير مطلوبغرف مميزة مفصولة بفاصلة وفراغ. انظر خيارات الغرف الرئيسيةnull
promptstring❌ غير مطلوبمطالبة نصية مخصصة للتوجيه الإضافي""
refImageUrlstring❌ غير مطلوبURL صورة منزل مرجعية لتوجيه الأسلوب""
modelTypestring✅ مطلوبنوع جودة النموذج. مجموعة القيم: 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. تستخدم القيم المترية ؛ والقيم الإمبراطورية تستخدم ft². يجب أن تكون القيمة الدنيا أقل من القيمة القصوى بخطوة واحدة على الأقل.

الوحدةالأدنىالأقصىالخطوةمثال
5050010150-200 m²
ft²50050001001500-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. يستخدم كل عنصر الشكل التالي:

الحقلالنوعالوصف
namestringاسم عرض غرفة النوم، مثلاً Room 1 (Master)
minAreastringالحد الأدنى لمساحة غرفة النوم. يجب أن يكون سلسلة رقمية غير سالبة
maxAreastringالحد الأقصى لمساحة غرفة النوم. يجب أن يكون أكبر من أو يساوي minArea
unitstringوحدة المساحة. مجموعة القيم: ، ft²

مثال افتراضي لـ bedrooms="2"

json
[
  { "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 كائن تخطيط حمام.

الحقلالنوعالوصف
namestringاسم عرض الحمام، مثلاً Bathroom 1
layoutstring / nullمجموعة القيم: With Wet & Dry Separation، Without Separation، أو null

مثال افتراضي لـ bathrooms="1"

json
[
  { "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
bash
# 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)
java
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)
python
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)
javascript
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();

📤 الاستجابة#

استجابة النجاح

json
{
  "code": 0,
  "message": "success",
  "data": 1234567890123456789
}
الحقلالنوعالوصف
codeintegerيشير 0 إلى النجاح
messagestringرسالة الاستجابة
datalongمعرف المهمة الفريد للاستعلام عن النتائج

2. استرداد نتيجة المهمة#

يسترجع الحالة والإخراج الحالية لمهمة مخطط منزل تم إنشاؤها سابقاً.

نقطة النهاية

نص عادي
GET /api/v1/housePlan/result

رؤوس الطلب

الرأسمطلوبالوصف
APIKEY✅ نعممفتاح مصادقة API الخاص بك

معاملات الاستعلام

المعاملالنوعمطلوبالوصف
taskIdlong✅ نعممعرف المهمة الذي تمت إعادته من نقطة النهاية لإنشاء المهمة

📥 أمثلة الطلب#

cURL
bash
curl -X GET "https://api.ideal.house/api/v1/housePlan/result?taskId=1234567890123456789" \
  -H "APIKEY: your_api_key_here"
Java (OkHttp)
java
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)
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/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)
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/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 كمصفوفة ذات عنصر واحد للتوافق.

استجابة النجاح (اكتمال المهمة)

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

استجابة (معالجة المهمة / في الطابور)

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

استجابة (فشل المهمة)

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

حقول الاستجابة

الحقلالنوعالوصف
idlongمعرّف المهمة الفريد
statusstringحالة المهمة الحالية (اطّلِع على حالة المهمة)
waitNumberintegerعدد المهام التي تسبق هذه المهمة في الطابور (يعني 0 المعالجة حاليًا)
percentageintegerنسبة اكتمال المهمة (0–100)
inputobjectمعاملات الإدخال الأصلية للمهمة
input.stylestringالنمط المعماري
input.totalAreastringنطاق المساحة الإجمالية
input.storiesstringعدد الطوابق
input.bedroomsstringعدد غرف النوم
input.bathroomsstringعدد الحمامات
input.garageEnabledbooleanهل تم طلب مرآب
input.garageTypestring / nullنوع المرآب
input.garageCapacitystring / nullعدد مساحات المرآب
input.basementstringنوع القبو
input.roofTypestringنوع السقف
input.outdoorSpacesarray<string>المساحات الخارجية
input.layoutConceptstringمفهوم التخطيط العام
input.bedroomAreaRangesarray<object>نطاقات مساحة غرف النوم
input.bathroomLayoutsarray<object>خيارات تخطيط الحمامات
input.kitchenLayoutstringأسلوب تخطيط المطبخ
input.kitchenFeatureOptionsarray<string>ميزات المطبخ الاختيارية
input.keyRoomsstringغرف مميزة رئيسية (مفصولة بفواصل)
input.promptstringمطالبة نصية مخصصة (إن وُجدت)
input.refImageUrlstringURL صورة مرجعية (إن وُجدت)
input.modelTypestringنوع النموذج المستخدم
outputobjectنتيجة التوليد (متاحة فقط عندما يكون status هو Success)
output.resultUrlstringURL إلى لوحة عرض مخطط المنزل المركبة المُنشأة
output.resultListarray<string>URLs إلى صور النتائج المُنشأة. بالنسبة لـ إنشاء مخططات المنازل، تكون عادة مصفوفة ذات عنصر واحد تحتوي على نفس URL مثل output.resultUrl
output.widthintegerعرض الإخراج بالبكسل
output.heightintegerارتفاع الإخراج بالبكسل

📊 حالة المهمة#

الحالةالوصف
Unprocessedتم إنشاء المهمة ولكن لم تبدأ بعد
Processingتتم معالجة المهمة حاليًا
Successاكتملت المهمة بنجاح — الإخراج متاح
Failedفشلت المهمة بسبب خطأ
Terminationتم قطع المهمة أو إنهاؤها

استعلم كل 3-5 ثوانٍ. اطّلِع على حد مهمات API.


❌ استجابات الخطأ#

تتشارك جميع استجابات الخطأ نفس هيكل JSON:

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

مرجع رموز الخطأ#

الرمزالاسمالوصفالإجراء المقترح
1001FAILEDفشل الطلب (خطأ عام)تحقق من حقل message للحصول على تفاصيل الخطأ المحددة
1003INTERNAL_ERRORخطأ داخلي في الخادمأعد المحاولة بعد فترة انتظار قصيرة; تواصل مع الدعم إذا استمر
1011PARAM_ERRORخطأ معامل الطلبتحقق من توفير جميع المعاملات المطلوبة وتنسيقها بشكل صحيح
5002API_KEY_INVALIDمفتاح API غير صالح أو مفقودتأكد من وجود رأس APIKEY وأن القيمة صحيحة
9010SCAN_TEXT_ERRORفشل مراجعة محتوى مطالبة النصعدّل المطالبة لإزالة أي محتوى حساس أو محظور
9038PROHIBITED_CONTENTتحتوي صورة الإخراج المُولَّدة على محتوى محظورعدّل التوجيه النصي/النمط/الإدخالات وأعد المحاولة
9051COINS_NOT_ENOUGHرصيد غير كافٍ / اعتماداتقم بتعبئة رصيد حسابك وحاول مرة أخرى

📄 للحصول على القائمة الكاملة لرموز خطأ API الشائعة، راجع مرجع رموز الخطأ.