Documentation de l'API de rendu 3D#
URL de base :
https://api.ideal.house
Version : v1
Mis à jour : 2026-03-06
📖 Vue d'ensemble#
L'API de rendu 3D vous permet de soumettre une tâche de rendu 3D basée sur une image source, avec un contrôle précis du degré de rendu, du mode de rendu, d'une invite textuelle optionnelle et d'images de style de référence. Le traitement est asynchrone et comprend deux étapes :
- Créer une tâche — Soumettez vos paramètres d'entrée et recevez un
taskId. - Interrogation périodique des résultats — Utilisez le
taskIdpour interroger l'état de la tâche et récupérer la sortie générée.
🔐 Authentification#
Toutes les requêtes API doivent être authentifiées à l'aide d'une clé API.
Incluez votre clé API dans l'en-tête de la requête :
| En-tête | Valeur |
|---|---|
APIKEY | your_api_key_here |
⚠️ Conservez votre clé API en sécurité. Ne l'exposez pas dans du code côté client ou dans des dépôts publics.
💰 Déduction de crédits#
[!WARNING] 🪙 Les crédits sont déduits en fonction du
modelTypesélectionné lors de la création réussie de la tâche. Si la tâche échoue finalement, les crédits déduits vous seront automatiquement remboursés.
Un solde insuffisant retournera le code d'erreur9051. 📄 Consultez Référence de déduction des crédits.
Modèle (modelType) | Crédits déduits |
|---|---|
Flash | 1 crédit |
Base | 3 crédits |
Pro | 10 crédits |
📌 Points de terminaison de l'API#
1. Créer une tâche de rendu 3D#
Crée une nouvelle tâche de rendu 3D et renvoie un taskId unique pour interrogation périodique.
Point de terminaison
POST /api/v1/ai3dRendering/generate
En-têtes de la requête
| En-tête | Requis | Description |
|---|---|---|
APIKEY | ✅ Oui | Votre clé d'authentification API |
Content-Type | ✅ Oui | application/json |
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
imageUrl | string | ✅ Obligatoire | URL de l'image source à rendre |
prompt | string | ❌ Optionnel | Invite textuelle supplémentaire pour guider le style ou le contenu du rendu |
modelType | string | ❌ Optionnel | Type de qualité du modèle. Énumération : Flash, Base, Pro. Valeur par défaut : Flash |
renderDegree | integer | ❌ Optionnel | Niveau d'intensité du rendu. Plage : 1 (plus léger) – 6 (plus fort). Valeur par défaut : 3. Effectif uniquement lorsque modelType est Flash |
renderMode | string | ❌ Optionnel | Mode de rendu. Énumération : default, creativeMode. Valeur par défaut : default |
refImageUrl | string | ❌ Optionnel | URL d'une image de style de référence pour guider le rendu |
⚠️ Remarque :
renderDegreen'a d'effet que lorsquemodelTypeest défini surFlash. SimodelTypen'est pas spécifié,Flashest utilisé par défaut.
🖼️ Exigences relatives aux images : Toutes les images d'entrée et de référence doivent utiliser les formats JPG/JPEG, PNG ou WebP. Chaque image ne doit pas dépasser 20 Mo, avec des dimensions comprises entre 128 × 128 px et 6,000 × 6,000 px (bornes incluses). Les images dépassant les dimensions maximales en pixels sont automatiquement redimensionnées proportionnellement pour tenir dans 6,000 × 6,000 px avant le traitement. Les URLs des images doivent être directement accessibles par le serveur API.
Types de modèle
| Valeur | Description |
|---|---|
Flash | Par défaut. Vitesse de génération la plus rapide, qualité standard. Prend en charge le contrôle de renderDegree |
Base | Vitesse et qualité équilibrées. renderDegree est ignoré |
Pro | Qualité maximale, génération plus lente. renderDegree est ignoré |
Modes de rendu
| Valeur | Description |
|---|---|
default | Mode par défaut. Conserve la texture et la structure de l'image originale lors du rendu (mode conservation de la texture) |
creativeMode | Mode créatif — applique des transformations de rendu plus artistiques et stylisées |
Degré de rendu
| Valeur | Description |
|---|---|
1 | Rendu le plus léger — transformation minimale |
2 – 5 | Intensité de rendu progressive |
6 | Rendu le plus fort — transformation maximale |
📥 Exemples de requête#
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();
📤 Réponse#
Réponse de succès
{
"code": 0,
"message": "success",
"data": 1234567890123456789
}
| Champ | Type | Description |
|---|---|---|
code | integer | 0 indique le succès |
message | string | Message de réponse |
data | long | L'ID unique de la tâche pour l'interrogation périodique des résultats |
2. Obtenir le résultat de la tâche#
Récupère l'état actuel et la sortie d'une tâche de rendu précédemment créée.
Point de terminaison
GET /api/v1/ai3dRendering/result
En-têtes de la requête
| En-tête | Requis | Description |
|---|---|---|
APIKEY | ✅ Oui | Votre clé d'authentification API |
Paramètres de requête
| Paramètre | Type | Requis | Description |
|---|---|---|---|
taskId | long | ✅ Oui | L'ID de tâche renvoyé par le point de terminaison de création |
📥 Exemples de requête#
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);
📤 Réponse#
Réponse de succès (tâche terminée)
{
"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
}
}
}
Réponse (tâche en cours de traitement / en file d'attente)
{
"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
}
}
Réponse (tâche échouée)
{
"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
}
}
Champs de la réponse
| Champ | Type | Description |
|---|---|---|
id | long | Identifiant unique de la tâche |
status | string | État actuel de la tâche (voir État de la tâche) |
waitNumber | integer | Nombre de tâches qui précèdent cette tâche dans la file d’attente (0 signifie actuellement en cours de traitement) |
percentage | integer | Pourcentage d'avancement de la tâche (0–100) |
input | object | Les paramètres d'entrée originaux de la tâche |
input.imageUrl | string | URL de l'image source (si fournie) |
input.prompt | string | Prompt textuel source (si fourni) |
input.modelType | string | Type de modèle utilisé |
input.renderDegree | integer | Niveau d'intensité du rendu utilisé (1–6) |
input.renderMode | string | Mode de rendu utilisé (default ou creativeMode) |
input.refImageUrl | string | URL de l'image de style de référence (si fournie) |
output | object | Résultat de la génération (disponible uniquement lorsque status est Success) |
output.resultUrl | string | URL vers l'image de sortie rendue |
output.width | integer | Largeur de sortie en pixels |
output.height | integer | Hauteur de sortie en pixels |
📊 État de la tâche#
| État | Description |
|---|---|
Unprocessed | La tâche a été créée mais n'a pas encore démarré |
Processing | La tâche est actuellement en cours de traitement |
Success | Tâche terminée avec succès — la sortie est disponible |
Failed | La tâche a échoué en raison d'une erreur |
Effectuez une interrogation périodique toutes les 3-5 secondes. Consultez Limite de tâches API.
❌ Réponses d'erreur#
Toutes les réponses d'erreur partagent la même structure JSON :
{
"code": 5002,
"message": "Invalid API Key",
"data": null
}
Référence des codes d'erreur#
| Code | Nom | Description | Action recommandée |
|---|---|---|---|
1001 | FAILED | Échec de la requête (erreur générique) | Consultez le champ message pour les détails spécifiques de l'erreur |
1003 | INTERNAL_ERROR | Erreur interne du serveur | Réessayez après un bref délai ; contactez le support si le problème persiste |
1011 | PARAM_ERROR | Erreur de paramètre de demande | Vérifiez que tous les paramètres requis sont fournis et correctement formatés |
5002 | API_KEY_INVALID | Clé API invalide ou manquante | Assurez-vous que l'en-tête APIKEY est présent et que la valeur est correcte |
9010 | SCAN_TEXT_ERROR | L'invite textuelle a échoué à l'examen de contenu | Modifiez l'invite pour supprimer tout contenu sensible ou interdit |
9038 | PROHIBITED_CONTENT | L'image de sortie générée contient du contenu interdit | Ajustez l'invite/le style/les entrées et réessayez |
9051 | COINS_NOT_ENOUGH | Crédits / pièces insuffisants | Alimentez vos crédits de compte et réessayez |
📄 Pour la liste complète des codes d'erreur courants de l'API, reportez-vous à la Référence des codes d'erreur.