Dokumentation zur AI 3D-Generierungs-API#
Basis-URL:
https://api.ideal.house
Version: v1
Aktualisiert: 2026-03-06
📖 Übersicht#
Die AI 3D-Generierungs-API ermöglicht es Ihnen, bild- oder promptbasierte 3D-Generierungsaufgaben einzureichen und deren Ergebnisse asynchron abzurufen. Der Workflow umfasst zwei Schritte:
- Aufgabe erstellen — Übermitteln Sie Ihre Eingabe (Bild-URL oder Text-Prompt) und erhalten Sie eine
taskId. - Ergebnisse regelmäßig abfragen — Verwenden Sie die
taskId, um den Aufgabenstatus zu überprüfen und das generierte Ergebnis abzurufen.
🔐 Authentifizierung#
Alle API Anfragen müssen mit einem API Key authentifiziert werden.
Fügen Sie Ihren API Key in den Anforderungsheader ein:
| Kopfzeile | Wert |
|---|---|
APIKEY | your_api_key_here |
⚠️ Bewahren Sie Ihren API Key sicher auf. Geben Sie ihn nicht in Client-seitigem Code oder öffentlichen Repositorien frei.
⚡ Parallelitätslimit#
🚦 Wichtig: Diese API erlaubt nur 1 gleichzeitige Anfrage pro Konto zur gleichen Zeit.
Wenn mehrere Anfragen gleichzeitig eingehen, werden nachfolgende Anfragen in eine Warteschlange gestellt und nacheinander verarbeitet.
Sie können Ihre Position in der Warteschlange über das FeldwaitNumberin der Aufgabenergebnisantwort überwachen.
💰 Guthabenverbrauch#
[!WARNING] 🪙 Jede Aufgabe zieht 20 Credits von Ihrem Konto ab, sobald die Aufgabe erfolgreich erstellt wurde.
Credits werden im Moment der Aufgabenerstellung abgebucht. Wenn die Aufgabe letztendlich fehlschlägt, werden die abgebuchten Credits Ihrem Konto automatisch wieder gutgeschrieben.
Unzureichende Guthabeneinheiten geben Fehlercode9051zurück. 📄 Siehe Referenz zum Guthabenverbrauch.
📌 API Endpunkte#
1. Erstellen einer 3D-Generierungsaufgabe#
Erstellt eine neue AI 3D-Generierungsaufgabe und gibt eine eindeutige taskId für die Abfrage zurück.
Endpunkt
POST /api/v1/ai3d/generate
Anforderungsheader
| Kopfzeile | Erforderlich | Beschreibung |
|---|---|---|
APIKEY | ✅ Ja | Ihr API Authentifizierungsschlüssel |
Content-Type | ✅ Ja | application/json |
Anforderungskörper
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
imageUrl | string | ⚠️ Entweder imageUrl oder prompt ist erforderlich | URL des Ausgangsbilds für die 3D-Generierung |
prompt | string | ⚠️ Entweder imageUrl oder prompt ist erforderlich | Text-Prompt, der den zu generierenden 3D-Inhalt beschreibt |
💡 Hinweis:
imageUrlundpromptschließen sich gegenseitig aus – geben Sie pro Anfrage einen davon an.
🖼️ Anforderungen an Bilder: Verwenden Sie JPG/JPEG, PNG oder WebP. Jedes Bild darf höchstens 20 MB groß sein und muss über eine Größe von 128 × 128 px bis zu 5,000 × 5,000 px (inklusiv) verfügen. Die Bild-URL muss direkt vom API-Server erreichbar sein.
📥 Anfragebeispiele#
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();
📤 Antwort#
Erfolgreiche Antwort
{
"code": 0,
"message": "success",
"data": 1234567890123456789
}
| Feld | Typ | Beschreibung |
|---|---|---|
code | integer | 0 zeigt Erfolg an |
message | string | Antwortnachricht |
data | long | Die eindeutige Aufgaben-ID für die Ergebnisabfrage |
2. Aufgabenergebnis abrufen#
Ruft den aktuellen Status und die Ausgabe einer zuvor erstellten Aufgabe ab.
Endpunkt
GET /api/v1/ai3d/result
Anforderungsheader
| Kopfzeile | Erforderlich | Beschreibung |
|---|---|---|
APIKEY | ✅ Ja | Ihr API Authentifizierungsschlüssel |
Abfrageparameter
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
taskId | long | ✅ Ja | Die vom Erstellungsendpunkt zurückgegebene Aufgaben-ID |
📥 Anfragebeispiele#
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);
📤 Antwort#
Erfolgreiche Antwort (Aufgabe abgeschlossen)
{
"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
}
}
}
Antwort (Aufgabe in Bearbeitung / in Warteschlange)
{
"code": 0,
"message": "success",
"data": {
"id": 1234567890123456789,
"status": "Processing",
"waitNumber": 2,
"percentage": 35,
"input": {
"imageUrl": "https://example.com/room.jpg"
},
"output": null
}
}
Antwort (Aufgabe fehlgeschlagen)
{
"code": 0,
"message": "success",
"data": {
"id": 1234567890123456789,
"status": "Failed",
"waitNumber": 0,
"percentage": 0,
"input": {
"imageUrl": "https://example.com/room.jpg"
},
"output": null
}
}
Antwortfelder
| Feld | Typ | Beschreibung |
|---|---|---|
id | long | Eindeutiger Aufgabenbezeichner |
status | string | Aktueller Aufgabenstatus (siehe Aufgabestatus) |
waitNumber | integer | Anzahl der Aufgaben vor Ihnen in der Warteschlange (0 bedeutet aktuell in Bearbeitung) |
percentage | integer | Fortschritt der Aufgabe in Prozent (0–100) |
input | object | Die ursprünglichen Eingabeparameter der Aufgabe |
input.imageUrl | string | URL des Ausgangsbilds (falls angegeben) |
input.prompt | string | Text-Prompt der Quelle (falls angegeben) |
input.modelType | string | Verwendeter Modelltyp |
output | object | Generierungsergebnis (nur verfügbar, wenn status Success ist) |
output.resultUrl | string | URL der generierten 3D-Modell-Datei |
output.width | integer | Ausgabebreite in Pixeln |
output.height | integer | Ausgabehöhe in Pixeln |
📊 Aufgabenstatus#
| Status | Beschreibung |
|---|---|
Unprocessed | Aufgabe wurde erstellt, aber noch nicht gestartet |
Processing | Aufgabe wird derzeit verarbeitet |
Success | Aufgabe erfolgreich abgeschlossen — Ausgabe ist verfügbar |
Failed | Aufgabe aufgrund eines Fehlers fehlgeschlagen |
Alle 3-5 Sekunden abfragen. Siehe API Aufgabenlimit.
❌ Fehlerantworten#
Alle Fehlerantworten haben dieselbe JSON-Struktur:
{
"code": 5002,
"message": "Invalid API Key",
"data": null
}
Fehlercode-Referenz#
| Code | Name | Beschreibung | Empfohlene Maßnahme |
|---|---|---|---|
1001 | FAILED | Anfrage fehlgeschlagen (generischer Fehler) | Überprüfen Sie das message-Feld für spezifische Fehlerdetails |
1003 | INTERNAL_ERROR | Interner Serverfehler | Wiederholen Sie nach kurzer Verzögerung; wenden Sie sich an den Support, falls es anhält |
1011 | PARAM_ERROR | Fehler in den Anfrageparametern | Überprüfen Sie, ob alle erforderlichen Parameter vorhanden und korrekt formatiert sind |
5002 | API_KEY_INVALID | Ungültiger oder fehlender API Key | Stellen Sie sicher, dass der APIKEY Header vorhanden ist und der Wert korrekt ist |
9010 | SCAN_TEXT_ERROR | Text-Prompt bestand Inhaltsüberprüfung nicht | Ändern Sie den Prompt, um sensible oder verbotene Inhalte zu entfernen |
9038 | PROHIBITED_CONTENT | Generiertes Ausgangsbild enthält verbotene Inhalte | Passen Sie Prompt/Stil/Eingaben an und wiederholen Sie |
9036 | COVERT_3D_FAILED | Dieses Bild unterstützt keine 3D-Generierung | Versuchen Sie ein anderes Bild mit klarerer Struktur und Tiefeninformation |
9051 | COINS_NOT_ENOUGH | Unzureichende Münzen / Credits | Laden Sie Ihre Kontocredits auf und wiederholen Sie den Vorgang |
Beispiele für Fehlerantworten#
5002 — Ungültiger API-Schlüssel
{
"code": 5002,
"message": "Invalid API Key",
"data": null
}
1011 — Parameterfehler
{
"code": 1011,
"message": "Request parameter error: imageUrl is required",
"data": null
}
9036 — Bild wird für die 3D-Generierung nicht unterstützt
{
"code": 9036,
"message": "This image does not support 3D generation",
"data": null
}
9010 — Textinhalt-Moderation fehlgeschlagen
{
"code": 9010,
"message": "Text prompt failed content review, contains prohibited content",
"data": null
}
9051 — Nicht ausreichende Credits
{
"code": 9051,
"message": "Insufficient coins",
"data": null
}
📄 Für die vollständige Liste gemeinsamer API Fehlercodes beachten Sie die Fehlercode-Referenz.