توثيق API لإنشاء 3D بالذكاء الاصطناعي#
URL الأساسي:
https://api.ideal.house
الإصدار: v1
آخر تحديث: 2026-03-06
📖 نظرة عامة#
تتيح لك API إنشاء 3D بالذكاء الاصطناعي إرسال مهام إنشاء 3D انطلاقًا من صورة أو توجيه نصي، واسترجاع نتائجها بصورة غير متزامنة. يتكون سير العمل من خطوتين:
- إنشاء مهمة — قدم إدخالك (صورة URL أو موجه نصي) واحصل على
taskId. - التحقق من النتائج — استخدم
taskIdللاستعلام عن حالة المهمة واسترداد الناتج المنشأ.
🔐 المصادقة#
يجب مصادقة جميع طلبات API باستخدام مفتاح API.
تضمّن مفتاح API في رأس الطلب:
| الرأس | القيمة |
|---|---|
APIKEY | your_api_key_here |
⚠️ احفظ مفتاح API بأمان. لا تعرضه في كود الواجهة الأمامية أو المستودعات العامة.
⚡ حد التوازي#
🚦 هام: يسمح هذا API بـ 1 طلب متزامن لكل حساب في كل مرة.
إذا تم إرسال عدة طلبات في وقت واحد، ستُضاف الطلبات التالية إلى قائمة الانتظار وتُعالج بالترتيب.
يمكنك مراقبة موقعك في قائمة الانتظار عبر حقلwaitNumberفي استجابة نتيجة المهمة.
💰 خصم الرصيد#
[!WARNING] 🪙 يتم خصم 20 رصيد لكل مهمة من حسابك عند نجاح إنشاء المهمة.
تُخصم الأرصدة عند إنشاء المهمة. إذا فشلت المهمة في النهاية، تُعاد الأرصدة المخصومة إلى حسابك تلقائيًا.
سيعيد نقص الرصيد رمز الخطأ9051. 📄 اطّلِع على مرجع خصم الرصيد.
📌 نقاط نهاية API#
1. إنشاء مهمة لتوليد 3D#
ينشئ مهمة جديدة لتوليد 3D بالذكاء الاصطناعي ويعيد taskId فريدًا للاستعلام الدوري عن النتيجة.
نقطة النهاية
POST /api/v1/ai3d/generate
رؤوس الطلب
| الرأس | مطلوب | الوصف |
|---|---|---|
APIKEY | ✅ نعم | مفتاح مصادقة API الخاص بك |
Content-Type | ✅ نعم | application/json |
جسم الطلب
| الحقل | النوع | مطلوب | الوصف |
|---|---|---|---|
imageUrl | string | ⚠️ إما imageUrl أو prompt مطلوب | URL صورة المصدر لإنشاء 3D منها |
prompt | string | ⚠️ إما imageUrl أو prompt مطلوب | وصف نصي لمحتوى 3D لإنشائه |
💡 ملاحظة:
imageUrlوpromptمتنافية — قدم أحدهما فقط لكل طلب.
🖼️ متطلبات الصورة: استخدم JPG/JPEG، PNG، أو WebP. يجب ألا تتجاوز كل صورة 20 MB، مع أبعاد من 128 × 128 بكسل إلى 5,000 × 5,000 بكسل (بما في ذلك). يجب أن تكون URL الصورة قابلة للوصول مباشرة من قبل خادم API.
📥 أمثلة الطلب#
cURL
# Using imageUrl
curl -X POST "https://api.ideal.house/api/v1/ai3d/generate" \
-H "APIKEY: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"imageUrl": "https://example.com/room.jpg"
}'
# Using prompt
curl -X POST "https://api.ideal.house/api/v1/ai3d/generate" \
-H "APIKEY: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"prompt": "A modern minimalist living room with wooden floor"
}'
Java (OkHttp)
import okhttp3.*;
import java.io.IOException;
public class Ai3dApiExample {
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/room.jpg"
}
""";
Request request = new Request.Builder()
.url(BASE_URL + "/api/v1/ai3d/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"
}
# Using imageUrl
payload = {
"imageUrl": "https://example.com/room.jpg"
}
# Or using prompt
# payload = {
# "prompt": "A modern minimalist living room with wooden floor"
# }
response = requests.post(
f"{BASE_URL}/api/v1/ai3d/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 createTask() {
try {
const response = await axios.post(
`${BASE_URL}/api/v1/ai3d/generate`,
{
imageUrl: 'https://example.com/room.jpg'
// Or use prompt instead:
// prompt: 'A modern minimalist living room with wooden floor',
},
{
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);
}
}
createTask();
📤 الاستجابة#
استجابة النجاح
{
"code": 0,
"message": "success",
"data": 1234567890123456789
}
| الحقل | النوع | الوصف |
|---|---|---|
code | integer | يشير 0 إلى النجاح |
message | string | رسالة الاستجابة |
data | long | معرف المهمة الفريد للاستعلام عن النتائج |
2. استرداد نتيجة المهمة#
يستحضر الحالة الحالية والإخراج لمهمة سابقة تم إنشاؤها.
نقطة النهاية
GET /api/v1/ai3d/result
رؤوس الطلب
| الرأس | مطلوب | الوصف |
|---|---|---|
APIKEY | ✅ نعم | مفتاح مصادقة API الخاص بك |
معاملات الاستعلام
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
taskId | long | ✅ نعم | معرف المهمة الذي تمت إعادته من نقطة النهاية لإنشاء المهمة |
📥 أمثلة الطلب#
cURL
curl -X GET "https://api.ideal.house/api/v1/ai3d/result?taskId=1234567890123456789" \
-H "APIKEY: your_api_key_here"
Java (OkHttp)
import okhttp3.*;
import java.io.IOException;
public class Ai3dResultExample {
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/ai3d/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/ai3d/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 failed or terminated")
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/ai3d/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);
} 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"
},
"output": {
"resultUrl": "https://cdn.ideal.house/output/result_3d_model.zip",
"width": 1024,
"height": 1024
}
}
}
استجابة (معالجة المهمة / في الطابور)
{
"code": 0,
"message": "success",
"data": {
"id": 1234567890123456789,
"status": "Processing",
"waitNumber": 2,
"percentage": 35,
"input": {
"imageUrl": "https://example.com/room.jpg"
},
"output": null
}
}
استجابة (فشل المهمة)
{
"code": 0,
"message": "success",
"data": {
"id": 1234567890123456789,
"status": "Failed",
"waitNumber": 0,
"percentage": 0,
"input": {
"imageUrl": "https://example.com/room.jpg"
},
"output": null
}
}
حقول الاستجابة
| الحقل | النوع | الوصف |
|---|---|---|
id | long | معرّف المهمة الفريد |
status | string | حالة المهمة الحالية (اطّلِع على حالة المهمة) |
waitNumber | integer | عدد المهام التي تسبق هذه المهمة في الطابور (يعني 0 المعالجة حاليًا) |
percentage | integer | نسبة اكتمال المهمة (0–100) |
input | object | معاملات الإدخال الأصلية للمهمة |
input.imageUrl | string | URL صورة المصدر (إذا تم توفيره) |
input.prompt | string | النص الأصلي للموجه (إذا تم توفيره) |
input.modelType | string | نوع النموذج المستخدم |
output | object | نتيجة التوليد (متاحة فقط عندما يكون status هو Success) |
output.resultUrl | string | URL إلى ملف نموذج 3D المنشأ |
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 | تحتوي صورة الإخراج المُولَّدة على محتوى محظور | عدّل التوجيه النصي/النمط/الإدخالات وأعد المحاولة |
9036 | COVERT_3D_FAILED | هذه الصورة لا تدعم إنشاء 3D | جرب صورة أخرى ذات هيكل وعمق أكثر وضوحًا |
9051 | COINS_NOT_ENOUGH | رصيد غير كافٍ / اعتمادات | قم بتعبئة رصيد حسابك وحاول مرة أخرى |
أمثلة استجابات الأخطاء#
5002 — مفتاح API غير صالح
{
"code": 5002,
"message": "Invalid API Key",
"data": null
}
1011 — خطأ المعلمات
{
"code": 1011,
"message": "Request parameter error: imageUrl is required",
"data": null
}
9036 — الصورة غير مدعومة لإنشاء 3D
{
"code": 9036,
"message": "This image does not support 3D generation",
"data": null
}
9010 — فشل فحص محتوى النص
{
"code": 9010,
"message": "Text prompt failed content review, contains prohibited content",
"data": null
}
9051 — رصيد غير كافٍ
{
"code": 9051,
"message": "Insufficient coins",
"data": null
}
📄 للحصول على القائمة الكاملة لرموز خطأ API الشائعة، راجع مرجع رموز الخطأ.