Documentatie voor de API voor AI-3D-rendering#
Basis-URL:
https://api.ideal.house
Versie: v1
Bijgewerkt: 2026-03-06
📖 Overzicht#
Met de API voor AI-3D-rendering kun je een 3D-rendertaak indienen op basis van een bronafbeelding, met gedetailleerde controle over rendersterkte, rendermodus, een optionele tekstinstructie en stijlreferentiebeelden. De werkstroom is asynchroon en bestaat uit twee stappen:
- Een taak aanmaken — Dien je invoerparameters in en ontvang een
taskId. - Resultaten regelmatig opvragen — Gebruik de
taskIdom de taakstatus op te vragen en de gegenereerde uitvoer op te halen.
🔐 Authenticatie#
Alle API-verzoeken moeten worden geauthenticeerd met een API Key.
Neem je API Key op in de verzoekheader:
| Verzoekheader | Waarde |
|---|---|
APIKEY | your_api_key_here |
⚠️ Houd je API Key geheim. Maak deze niet zichtbaar in clientcode of openbare opslagplaatsen.
💰 Creditafschrijving#
[!WARNING] 🪙 Credits worden op basis van de geselecteerde
modelTypeafgeschreven zodra de taak succesvol is aangemaakt. Als de taak uiteindelijk mislukt, worden de afgeschreven credits automatisch terugbetaald op je account.
Onvoldoende credits leveren foutcode9051op. 📄 Zie de referentie voor creditafschrijving.
Modeltype (modelType) | Afgeschreven credits |
|---|---|
Flash | 1 tegoedeenheid |
Base | 3 tegoedeenheden |
Pro | 10 tegoedeenheden |
📌 API-endpoints#
1. Een 3D-rendertaak aanmaken#
Maakt een nieuwe AI-3D-rendertaak aan en retourneert een unieke taskId om de status regelmatig op te vragen.
Eindpunt
POST /api/v1/ai3dRendering/generate
Verzoekheaders
| Verzoekheader | Verplicht | Beschrijving |
|---|---|---|
APIKEY | ✅ Ja | Je API-authenticatiesleutel |
Content-Type | ✅ Ja | application/json |
Verzoekinhoud
| Veld | Type | Verplicht | Beschrijving |
|---|---|---|---|
imageUrl | string | ✅ Ja | URL van de te renderen bronafbeelding |
prompt | string | ❌ Optioneel | Aanvullende tekstinstructie om renderstijl of inhoud te sturen |
modelType | string | ❌ Optioneel | Modelkwaliteitsniveau. Mogelijke waarden: Flash, Base, Pro. Standaard Flash |
renderDegree | integer | ❌ Optioneel | Renderintensiteit. Bereik: 1, het minst ingrijpend, tot 6, het sterkst. Standaard 3. Werkt alleen wanneer modelType gelijk is aan Flash |
renderMode | string | ❌ Optioneel | Rendermodus. Mogelijke waarden: default, creativeMode. Standaard default |
refImageUrl | string | ❌ Optioneel | URL van een stijlreferentiebeeld om de renderuitvoer te sturen |
⚠️ Opmerking:
renderDegreewerkt alleen wanneermodelTypeis ingesteld opFlash. AlsmodelTypeniet is opgegeven, wordt standaardFlashgebruikt.
🖼️ Afbeeldingsvereisten: Alle invoer- en referentieafbeeldingen moeten JPG/JPEG, PNG of WebP gebruiken. Elke afbeelding mag maximaal 20 MB groot zijn, met afmetingen van 128 × 128 px tot en met 6,000 × 6,000 px. Afbeeldingen boven de maximale pixelafmetingen worden vóór verwerking automatisch evenredig verkleind tot binnen 6,000 × 6,000 px. Afbeeldings-URLs moeten rechtstreeks bereikbaar zijn voor de API-server.
Modeltypen
| Waarde | Beschrijving |
|---|---|
Flash | Standaard. Hoogste generatiesnelheid, standaardkwaliteit. Ondersteunt instelling van renderDegree |
Base | Evenwicht tussen snelheid en kwaliteit. renderDegree wordt genegeerd |
Pro | Hoogste kwaliteit, tragere generatie. renderDegree wordt genegeerd |
Rendermodi
| Waarde | Beschrijving |
|---|---|
default | Standaardmodus. Behoudt de oorspronkelijke beeldtextuur en structuur tijdens het renderen: modus voor textuurbehoud |
creativeMode | Creatieve modus: past meer artistieke en gestileerde rendertransformaties toe |
Rendersterkte
| Waarde | Beschrijving |
|---|---|
1 | Laagste renderintensiteit: minimale transformatie |
2 – 5 | Oplopende renderintensiteit |
6 | Hoogste renderintensiteit: maximale transformatie |
📥 Verzoekvoorbeelden#
cURL
# Using Flash model with renderDegree (texture preservation mode)
curl -X POST "https://api.ideal.house/api/v1/ai3dRendering/generate" \
-H "APIKEY: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"imageUrl": "https://example.com/room.jpg",
"modelType": "Flash",
"renderDegree": 4,
"renderMode": "default"
}'
# Using Flash model with creative mode, prompt and a reference image
curl -X POST "https://api.ideal.house/api/v1/ai3dRendering/generate" \
-H "APIKEY: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"imageUrl": "https://example.com/room.jpg",
"prompt": "A modern minimalist living room with wooden floor",
"modelType": "Flash",
"renderDegree": 5,
"renderMode": "creativeMode",
"refImageUrl": "https://example.com/style-reference.jpg"
}'
# Using Pro model (renderDegree is ignored)
curl -X POST "https://api.ideal.house/api/v1/ai3dRendering/generate" \
-H "APIKEY: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"imageUrl": "https://example.com/room.jpg",
"modelType": "Pro",
"renderMode": "default"
}'
Java (OkHttp)
import okhttp3.*;
import java.io.IOException;
public class Ai3dRenderingApiExample {
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();
// Flash model with renderDegree (renderDegree only works with Flash)
String requestBody = """
{
"imageUrl": "https://example.com/room.jpg",
"modelType": "Flash",
"renderDegree": 4,
"renderMode": "default"
}
""";
// Pro model example (renderDegree is ignored)
// String requestBody = """
// {
// "imageUrl": "https://example.com/room.jpg",
// "modelType": "Pro",
// "renderMode": "default"
// }
// """;
Request request = new Request.Builder()
.url(BASE_URL + "/api/v1/ai3dRendering/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"
}
# Flash model — renderDegree takes effect (default texture preservation mode)
payload = {
"imageUrl": "https://example.com/room.jpg",
"modelType": "Flash",
"renderDegree": 4,
"renderMode": "default"
}
# Flash model with creative mode, prompt and reference image
# payload = {
# "imageUrl": "https://example.com/room.jpg",
# "prompt": "A modern minimalist living room with wooden floor",
# "modelType": "Flash",
# "renderDegree": 5,
# "renderMode": "creativeMode",
# "refImageUrl": "https://example.com/style-reference.jpg"
# }
# Pro model — renderDegree is ignored
# payload = {
# "imageUrl": "https://example.com/room.jpg",
# "modelType": "Pro",
# "renderMode": "default"
# }
response = requests.post(
f"{BASE_URL}/api/v1/ai3dRendering/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 createRenderingTask() {
try {
const response = await axios.post(
`${BASE_URL}/api/v1/ai3dRendering/generate`,
{
// Flash model — renderDegree takes effect
imageUrl: 'https://example.com/room.jpg',
modelType: 'Flash',
renderDegree: 4,
renderMode: 'default'
// Flash model with creative mode:
// prompt: 'A modern minimalist living room with wooden floor',
// modelType: 'Flash',
// renderDegree: 5,
// renderMode: 'creativeMode',
// refImageUrl: 'https://example.com/style-reference.jpg'
// Pro model — renderDegree is ignored:
// imageUrl: 'https://example.com/room.jpg',
// modelType: 'Pro',
// renderMode: 'default'
},
{
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);
}
}
createRenderingTask();
📤 Antwoord#
Succesantwoord
{
"code": 0,
"message": "success",
"data": 1234567890123456789
}
| Veld | Type | Beschrijving |
|---|---|---|
code | integer | 0 geeft succes aan |
message | string | Antwoordbericht |
data | long | De unieke taak-ID voor het regelmatig opvragen van resultaten |
2. Taakresultaat ophalen#
Haalt de huidige status en uitvoer van een eerder aangemaakte rendertaak op.
Eindpunt
GET /api/v1/ai3dRendering/result
Verzoekheaders
| Verzoekheader | Verplicht | Beschrijving |
|---|---|---|
APIKEY | ✅ Ja | Je API-authenticatiesleutel |
Queryparameters
| Queryparameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
taskId | long | ✅ Ja | De taak-ID die het endpoint voor het aanmaken van taken retourneert |
📥 Verzoekvoorbeelden#
cURL
curl -X GET "https://api.ideal.house/api/v1/ai3dRendering/result?taskId=1234567890123456789" \
-H "APIKEY: your_api_key_here"
Java (OkHttp)
import okhttp3.*;
import java.io.IOException;
public class Ai3dRenderingResultExample {
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/ai3dRendering/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/ai3dRendering/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 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/ai3dRendering/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);
📤 Antwoord#
Succesantwoord: taak voltooid
{
"code": 0,
"message": "success",
"data": {
"id": 1234567890123456789,
"status": "Success",
"waitNumber": 0,
"percentage": 100,
"input": {
"imageUrl": "https://example.com/room.jpg",
"modelType": "Flash",
"renderDegree": 4,
"renderMode": "default"
},
"output": {
"resultUrl": "https://cdn.ideal.house/output/rendered_result.jpg",
"width": 1024,
"height": 1024
}
}
}
Antwoord: taak in verwerking of in de wachtrij
{
"code": 0,
"message": "success",
"data": {
"id": 1234567890123456789,
"status": "Processing",
"waitNumber": 1,
"percentage": 50,
"input": {
"imageUrl": "https://example.com/room.jpg",
"modelType": "Flash",
"renderDegree": 4,
"renderMode": "default"
},
"output": null
}
}
Antwoord: taak mislukt
{
"code": 0,
"message": "success",
"data": {
"id": 1234567890123456789,
"status": "Failed",
"waitNumber": 0,
"percentage": 0,
"input": {
"imageUrl": "https://example.com/room.jpg",
"modelType": "Flash",
"renderDegree": 4,
"renderMode": "default"
},
"output": null
}
}
Antwoordvelden
| Veld | Type | Beschrijving |
|---|---|---|
id | long | Unieke taakidentificatie |
status | string | Huidige taakstatus; zie taakstatus |
waitNumber | integer | Aantal taken vóór deze taak in de wachtrij; 0 betekent dat de taak wordt verwerkt |
percentage | integer | Voltooiingspercentage van de taak (0–100) |
input | object | De oorspronkelijke invoerparameters van de taak |
input.imageUrl | string | URL van de bronafbeelding, indien opgegeven |
input.prompt | string | Oorspronkelijke tekstinstructie, indien opgegeven |
input.modelType | string | Gebruikt modeltype |
input.renderDegree | integer | Gebruikte renderintensiteit (1–6) |
input.renderMode | string | Gebruikte rendermodus: default of creativeMode |
input.refImageUrl | string | URL van het stijlreferentiebeeld, indien opgegeven |
output | object | Generatieresultaat, alleen beschikbaar wanneer status gelijk is aan Success |
output.resultUrl | string | URL van de gerenderde uitvoerafbeelding |
output.width | integer | Uitvoerbreedte in pixels |
output.height | integer | Uitvoerhoogte in pixels |
📊 Taakstatus#
| Status | Beschrijving |
|---|---|
Unprocessed | De taak is aangemaakt, maar nog niet gestart |
Processing | De taak wordt momenteel verwerkt |
Success | De taak is succesvol voltooid; uitvoer is beschikbaar |
Failed | De taak is door een fout mislukt |
Vraag de status elke 3-5 seconden op. Zie de taaklimiet voor de API.
❌ Foutantwoorden#
Alle foutantwoorden hebben dezelfde JSON-structuur:
{
"code": 5002,
"message": "Invalid API Key",
"data": null
}
Foutcodereferentie#
| Code | Naam | Beschrijving | Aanbevolen actie |
|---|---|---|---|
1001 | FAILED | Verzoek mislukt: algemene fout | Controleer het veld message voor specifieke foutdetails |
1003 | INTERNAL_ERROR | Interne serverfout | Probeer het na een korte wachttijd opnieuw; neem contact op met ondersteuning als de fout blijft optreden |
1011 | PARAM_ERROR | Fout in verzoekparameters | Controleer dat alle verplichte parameters zijn opgegeven en correct zijn opgemaakt |
5002 | API_KEY_INVALID | Ongeldige of ontbrekende API Key | Controleer dat de header APIKEY aanwezig is en de waarde klopt |
9010 | SCAN_TEXT_ERROR | Tekstinstructie afgekeurd bij inhoudscontrole | Pas de instructie aan om gevoelige of verboden inhoud te verwijderen |
9038 | PROHIBITED_CONTENT | De gegenereerde uitvoerafbeelding bevat verboden inhoud | Pas instructie, stijl of invoer aan en probeer opnieuw |
9051 | COINS_NOT_ENOUGH | Onvoldoende munten / credits | Vul je accountcredits aan en probeer opnieuw |
📄 Raadpleeg de foutcodereferentie voor de volledige lijst van algemene API-foutcodes.