Documentation de l'API de changement de mobilier#
URL de base :
https://api.ideal.house
Version : v1
Mis à jour : 2026-05-21
📖 Vue d'ensemble#
L'API de changement de mobilier restyle ou modifie le mobilier dans une image d'intérieur. Soumettez une image source et des consignes de style optionnelles, puis interrogez le résultat de la tâche de manière asynchrone.
- Créer une tâche — Soumettez
imageUrlet des consignes optionnelles, puis recevez untaskId. - Interrogation périodique des résultats — Utilisez
taskIdpour interroger le statut de la tâche et l'image de sortie.
🔐 Authentification#
Toutes les requêtes API doivent inclure une clé API dans l'en-tête de la requête.
| En-tête | Valeur |
|---|---|
APIKEY | your_api_key_here |
💰 Déduction de crédits#
[!WARNING] 🪙 1 crédit est déduit lorsqu'une tâche est créée avec succès. Si la tâche échoue finalement, le crédit déduit sera automatiquement remboursé.
Un solde insuffisant renvoie le code d'erreur9051. Voir Référence de déduction de crédits.
| Opération | Crédits déduits |
|---|---|
| Tâche de changement de mobilier | 1 crédit |
🎨 Options de style#
Cette API prend en charge des paramètres de style optionnels renvoyés par le point de terminaison Configuration du style API.
Utilisation :
GET /api/v1/style/change_furniture/getStyles
| Groupe de style | Champ de la requête | Description |
|---|---|---|
roomType | indoorTypeId | Option de type de pièce |
style | indoorStyleId | Option de style intérieur |
elements | indoorElemId | Option d'élément de pièce. Prend en charge plusieurs IDs d'options joints par une virgule, par exemple id1,id2 |
Chaque option contient :
| Champ | Description |
|---|---|
name | Nom multilingue de l'option |
id | Valeur à transmettre dans le champ de la requête |
url | Image d'aperçu de l'option |
📌 Points de terminaison de l'API#
1. Créer une tâche de changement de mobilier#
Point de terminaison
POST /api/v1/changeFurniture/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 | ✅ Oui | URL de l'image intérieure source |
prompt | string | ❌ Optionnel | Instructions textuelles pour le résultat souhaité |
indoorTypeId | string | ❌ Optionnel | ID de type de pièce depuis les options de style roomType |
indoorStyleId | string | ❌ Optionnel | ID de style intérieur depuis les options de style style |
indoorElemId | string | ❌ Optionnel | ID d'élément de pièce depuis les options de style elements. Prend en charge plusieurs IDs joints par une virgule, par exemple id1,id2 |
Seul
imageUrlest requis. Tous les autres champs sont optionnels.
🖼️ Exigences relatives aux images : Utilisez 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 (inclus). Les images dépassant les dimensions maximales en pixels sont automatiquement réduites à la taille proportionnellement pour respecter les 6,000 × 6,000 px avant traitement. L'URL de l'image doit être directement accessible par le serveur API.
📥 Exemples de requête#
cURL
curl -X POST "https://api.ideal.house/api/v1/changeFurniture/generate" \
-H "APIKEY: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"imageUrl": "https://example.com/living-room.jpg",
"prompt": "replace the sofa with a modern warm neutral sofa",
"indoorTypeId": "Interior Design_Interior Scene_Living Room",
"indoorStyleId": "Interior_Interior Style_Popular_Modern Country",
"indoorElemId": "Interior Design_Scene Elements_Living Room_Shelving,Interior Design_Scene Elements_Living Room_Coffee Table"
}'
Java (OkHttp)
import okhttp3.*;
import java.io.IOException;
public class ChangeFurnitureApiExample {
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/living-room.jpg",
"prompt": "replace the sofa with a modern warm neutral sofa",
"indoorTypeId": "Interior Design_Interior Scene_Living Room",
"indoorStyleId": "Interior_Interior Style_Popular_Modern Country",
"indoorElemId": "Interior Design_Scene Elements_Living Room_Shelving,Interior Design_Scene Elements_Living Room_Coffee Table"
}
""";
Request request = new Request.Builder()
.url(BASE_URL + "/api/v1/changeFurniture/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"
}
payload = {
"imageUrl": "https://example.com/living-room.jpg",
"prompt": "replace the sofa with a modern warm neutral sofa",
"indoorTypeId": "Interior Design_Interior Scene_Living Room",
"indoorStyleId": "Interior_Interior Style_Popular_Modern Country",
"indoorElemId": "Interior Design_Scene Elements_Living Room_Shelving,Interior Design_Scene Elements_Living Room_Coffee Table"
}
response = requests.post(
f"{BASE_URL}/api/v1/changeFurniture/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 createChangeFurnitureTask() {
try {
const response = await axios.post(
`${BASE_URL}/api/v1/changeFurniture/generate`,
{
imageUrl: 'https://example.com/living-room.jpg',
prompt: 'replace the sofa with a modern warm neutral sofa',
indoorTypeId: 'Interior Design_Interior Scene_Living Room',
indoorStyleId: 'Interior_Interior Style_Popular_Modern Country',
indoorElemId: 'Interior Design_Scene Elements_Living Room_Shelving,Interior Design_Scene Elements_Living Room_Coffee Table'
},
{
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);
}
}
createChangeFurnitureTask();
📤 Réponse#
{
"code": 0,
"message": "success",
"data": 1234567890123456789
}
| Champ | Type | Description |
|---|---|---|
code | integer | 0 indique le succès |
message | string | Message de réponse |
data | long | ID de tâche pour l'interrogation périodique des résultats |
2. Obtenir le résultat de la tâche#
Point de terminaison
GET /api/v1/changeFurniture/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 | ID de tâche retourné par le point de terminaison de création |
📥 Exemples de requête#
cURL
curl -X GET "https://api.ideal.house/api/v1/changeFurniture/result?taskId=1234567890123456789" \
-H "APIKEY: your_api_key_here"
Java (OkHttp)
import okhttp3.*;
import java.io.IOException;
public class ChangeFurnitureResultExample {
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/changeFurniture/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
while True:
response = requests.get(
f"{BASE_URL}/api/v1/changeFurniture/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)
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 pollChangeFurnitureResult(taskId) {
const headers = { APIKEY: API_KEY };
while (true) {
const response = await axios.get(
`${BASE_URL}/api/v1/changeFurniture/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);
console.log('Size:', result.output.width, 'x', result.output.height);
} else {
console.log('Task ended with status:', status);
}
break;
}
await new Promise(resolve => setTimeout(resolve, 3000));
}
}
pollChangeFurnitureResult(1234567890123456789n);
📤 Exemple de réponse#
{
"code": 0,
"message": "success",
"data": {
"id": 1234567890123456789,
"status": "Success",
"waitNumber": 0,
"percentage": 100,
"input": {
"imageUrl": "https://example.com/living-room.jpg",
"prompt": "replace the sofa with a modern warm neutral sofa",
"indoorTypeId": "Interior Design_Interior Scene_Living Room",
"indoorStyleId": "Interior_Interior Style_Popular_Modern Country",
"indoorElemId": "Interior Design_Scene Elements_Living Room_Shelving,Interior Design_Scene Elements_Living Room_Coffee Table"
},
"output": {
"resultUrl": "https://cdn.ideal.house/output/change_furniture_result.jpg",
"width": 1024,
"height": 1024
}
}
}
Réponse (Traitement de la tâche / En file d'attente)
{
"code": 0,
"message": "success",
"data": {
"id": 1234567890123456789,
"status": "Processing",
"waitNumber": 1,
"percentage": 45,
"input": {
"imageUrl": "https://example.com/living-room.jpg",
"prompt": "replace the sofa with a modern warm neutral sofa"
},
"output": null
}
}
Réponse (Échec de la tâche)
{
"code": 0,
"message": "success",
"data": {
"id": 1234567890123456789,
"status": "Failed",
"waitNumber": 0,
"percentage": 0,
"input": {
"imageUrl": "https://example.com/living-room.jpg"
},
"output": null
}
}
📊 Statut de la tâche#
| Statut | Description |
|---|---|
Unprocessed | La tâche a été créée et attend dans la file d'attente |
Processing | La tâche est actuellement en cours d'exécution |
Success | La tâche est terminée avec succès |
Failed | La tâche a échoué et aucune sortie n'a été produite |
Effectuez une interrogation périodique toutes les 3-5 secondes. Consultez Limite de tâches API.
❌ Réponses d'erreur#
| Code | Nom | Description |
|---|---|---|
1011 | PARAM_ERROR | Erreur de paramètre de requête |
5002 | API_KEY_INVALID | Clé API invalide ou manquante |
9010 | SCAN_TEXT_ERROR | Échec de l'examen de contenu du prompt |
9038 | PROHIBITED_CONTENT | L'image générée contient du contenu interdit |
9051 | COINS_NOT_ENOUGH | Crédits insuffisants |
Pour les définitions complètes des erreurs courantes, voir Référence des codes d'erreur.