Ideal House
Aller au contenu principal

Documentation de l'API de remodelage intérieur#

URL de base : https://api.ideal.house
Version : v1
Mis à jour : 2026-05-21


📖 Vue d'ensemble#

L'API de remodelage intérieur transforme une image d'intérieur et peut utiliser optionnellement des options de style de pièce, des instructions textuelles et des consignes de couleur.

Le traitement est asynchrone :

  1. Créer une tâche — Soumettez imageUrl et des paramètres optionnels, puis recevez un taskId.
  2. Interrogation périodique des résultats — Utilisez taskId pour récupérer le statut de la tâche et l'image générée.

🔐 Authentification#

En-têteValeur
APIKEYyour_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'erreur 9051. Voir Référence de déduction de crédits.

OpérationCrédits déduits
Tâche de remodelage intérieur1 crédit

🎨 Options de style#

Cette API prend en charge des paramètres de style optionnels renvoyés par le point de terminaison Configuration de style API.

Utilisation :

Texte brut
GET /api/v1/style/interoir_remodel/getStyles
Groupe de styleChamp de la requêteDescription
roomTypeindoorTypeIdOption de type de pièce
styleindoorStyleIdOption de style intérieur
elementsindoorElemIdOption d'élément de pièce. Prend en charge plusieurs IDs d'options joints par une virgule, par exemple id1,id2

Chaque option contient name, id et url. Transmettez l'id de l'option dans le champ de requête correspondant.


🎨 Consignes de couleur#

colorString et colorImgUrl sont des entrées de consignes de couleur optionnelles :

CasComportement
Seul colorString est fourniUtiliser colorString
Seul colorImgUrl est fourniUtiliser l'image de référence de couleur
Les deux sont fourniscolorString a la priorité
Aucun n'est fourniLa consigne de couleur par défaut est auto

📌 Points de terminaison de l'API#

1. Créer une tâche de remodelage intérieur#

Point de terminaison

Texte brut
POST /api/v1/interiorRemodel/generate

En-têtes de la requête

En-têteRequisDescription
APIKEY✅ OuiVotre clé d'authentification API
Content-Type✅ Ouiapplication/json

Corps de la requête

ChampTypeRequisDescription
imageUrlstring✅ OuiURL de l'image intérieure source
promptstring❌ OptionnelInstructions textuelles pour le remodelage souhaité
indoorTypeIdstring❌ OptionnelID de type de pièce depuis les options de style roomType
indoorStyleIdstring❌ OptionnelID de style intérieur depuis les options de style style
indoorElemIdstring❌ OptionnelID 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
colorStringstring❌ OptionnelChaîne de palette de couleurs, par exemple [[174,238,238],[36,36,36]]
colorImgUrlstring❌ OptionnelURL de l'image de référence de couleur

Seul imageUrl est requis. Tous les autres champs sont optionnels.

🖼️ Exigences relatives aux images : Toutes les images source et de référence doivent être au format 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. Les URLs des images doivent être directement accessibles par le serveur API.

📥 Exemples de requête#

cURL
bash
curl -X POST "https://api.ideal.house/api/v1/interiorRemodel/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "imageUrl": "https://example.com/interior.jpg",
    "prompt": "modern warm remodel with clean built-in storage",
    "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",
    "colorString": "[[174,238,238],[36,36,36],[117,64,95]]"
  }'
Java (OkHttp)
java
import okhttp3.*;

import java.io.IOException;

public class InteriorRemodelApiExample {

    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/interior.jpg",
                    "prompt": "modern warm remodel with clean built-in storage",
                    "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",
                    "colorString": "[[174,238,238],[36,36,36],[117,64,95]]"
                }
                """;

        Request request = new Request.Builder()
                .url(BASE_URL + "/api/v1/interiorRemodel/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)
python
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/interior.jpg",
    "prompt": "modern warm remodel with clean built-in storage",
    "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",
    "colorString": "[[174,238,238],[36,36,36],[117,64,95]]"
}

response = requests.post(
    f"{BASE_URL}/api/v1/interiorRemodel/generate",
    headers=headers,
    json=payload
)

data = response.json()
task_id = data.get("data")
print(f"Task ID: {task_id}")
Node.js (axios)
javascript
const axios = require('axios');

const BASE_URL = 'https://api.ideal.house';
const API_KEY = 'your_api_key_here';

async function createInteriorRemodelTask() {
  try {
    const response = await axios.post(
      `${BASE_URL}/api/v1/interiorRemodel/generate`,
      {
        imageUrl: 'https://example.com/interior.jpg',
        prompt: 'modern warm remodel with clean built-in storage',
        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',
        colorString: '[[174,238,238],[36,36,36],[117,64,95]]'
      },
      {
        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);
  }
}

createInteriorRemodelTask();

📤 Réponse#

json
{
  "code": 0,
  "message": "success",
  "data": 1234567890123456789
}

2. Obtenir le résultat de la tâche#

Point de terminaison

Texte brut
GET /api/v1/interiorRemodel/result

En-têtes de la requête

En-têteRequisDescription
APIKEY✅ OuiVotre clé d'authentification API

Paramètres de requête

ParamètreTypeRequisDescription
taskIdlong✅ OuiID de tâche retourné par le point de terminaison de création

📥 Exemples de requête#

cURL
bash
curl -X GET "https://api.ideal.house/api/v1/interiorRemodel/result?taskId=1234567890123456789" \
  -H "APIKEY: your_api_key_here"
Java (OkHttp)
java
import okhttp3.*;

import java.io.IOException;

public class InteriorRemodelResultExample {

    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/interiorRemodel/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)
python
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/interiorRemodel/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)
javascript
const axios = require('axios');

const BASE_URL = 'https://api.ideal.house';
const API_KEY = 'your_api_key_here';

async function pollInteriorRemodelResult(taskId) {
  const headers = { APIKEY: API_KEY };

  while (true) {
    const response = await axios.get(
      `${BASE_URL}/api/v1/interiorRemodel/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));
  }
}

pollInteriorRemodelResult(1234567890123456789n);

📤 Exemple de réponse#

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Success",
    "waitNumber": 0,
    "percentage": 100,
    "input": {
      "imageUrl": "https://example.com/interior.jpg",
      "prompt": "modern warm remodel with clean built-in storage",
      "indoorTypeId": "Interior Design_Interior Scene_Living Room",
      "indoorStyleId": "Interior_Interior Style_Popular_Modern Country",
      "colorString": "[[174,238,238],[36,36,36],[117,64,95]]"
    },
    "output": {
      "resultUrl": "https://cdn.ideal.house/output/interior_remodel_result.jpg",
      "width": 1024,
      "height": 1024
    }
  }
}

Réponse (Traitement de la tâche / En file d'attente)

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Processing",
    "waitNumber": 1,
    "percentage": 45,
    "input": {
      "imageUrl": "https://example.com/interior.jpg",
      "prompt": "modern warm remodel with clean built-in storage"
    },
    "output": null
  }
}

Réponse (Échec de la tâche)

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Failed",
    "waitNumber": 0,
    "percentage": 0,
    "input": {
      "imageUrl": "https://example.com/interior.jpg"
    },
    "output": null
  }
}

📊 Statut de la tâche#

StatutDescription
UnprocessedLa tâche a été créée et attend dans la file d'attente
ProcessingLa tâche est actuellement en cours d'exécution
SuccessLa tâche est terminée avec succès
FailedLa 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#

CodeNomDescription
1011PARAM_ERRORErreur de paramètre de requête
5002API_KEY_INVALIDClé API invalide ou manquante
9010SCAN_TEXT_ERRORÉchec de l'examen de contenu du prompt
9038PROHIBITED_CONTENTL'image générée contient du contenu interdit
9051COINS_NOT_ENOUGHCrédits insuffisants

Pour les définitions complètes des erreurs courantes, voir Référence des codes d'erreur.