Ideal House
Aller au contenu principal

Documentation de l'API de rénovation d'extérieur#

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


📖 Aperçu#

L'API de rénovation d'extérieur vous permet de rénover ou de restaurer l'apparence extérieure d'un bâtiment à partir d'une image d'entrée. Vous fournissez une image source et vous pouvez éventuellement ajouter des indications textuelles, une image de référence, un style de bâtiment ou une préférence d'environnement pour orienter le résultat de la rénovation.

Le flux de travail est asynchrone et comporte deux étapes :

  1. Créer une tâche — Soumettez votre image d'extérieur et vos instructions optionnelles, puis recevez un taskId.
  2. Interrogation périodique des résultats — Utilisez le taskId pour interroger l'état de la tâche et récupérer l'image 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êteValeur
APIKEYyour_api_key_here

⚠️ Gardez votre clé API en sécurité. Ne l'exposez pas dans le code côté client ni dans les dépôts publics.


💰 Déduction de crédits#

[!WARNING] 🪙 1 crédit est déduit lors de la création réussie de la tâche. Si la tâche échoue finalement, le crédit déduit sera automatiquement remboursé sur votre compte.
Un solde insuffisant renverra le code d'erreur 9051. 📄 Consultez la Référence de déduction des crédits.

OpérationCrédits déduits
Tâche de rénovation extérieure1 crédit

Pour les règles détaillées relatives aux crédits, consultez la Référence de déduction des crédits.


📌 Points de terminaison de l'API#


1. Créer une tâche de rénovation d'extérieur#

Crée une nouvelle tâche de rénovation extérieure et renvoie un taskId unique pour l'interrogation périodique.

Point de terminaison

Texte brut
POST /api/v1/exteriorRenovator/generate

En-têtes de requête

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

Corps de la requête

ChampTypeObligatoireDescription
imageUrlstring✅ OuiURL de l'image extérieure source à rénover
promptstring❌ FacultatifInstructions textuelles optionnelles pour le résultat de la rénovation
referenceUrlstring❌ FacultatifURL facultative d'une image de référence pour guider le style visuel
buildingStyleIdstring❌ FacultatifID de style de bâtiment optionnel
environmentIdstring❌ FacultatifID de style d'environnement ou de scène optionnel. Prend en charge plusieurs IDs séparés par des virgules, par exemple id1,id2

⚠️ Seul imageUrl est obligatoire. Tous les autres champs du corps de la requête sont facultatifs.

🖼️ Exigences relatives aux images : Toutes les images sources 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 dont les dimensions maximales en pixels sont dépassées sont automatiquement redimensionnées proportionnellement pour s'intégrer dans 6,000 × 6,000 px avant le traitement. Les URLs des images doivent être directement accessibles par le serveur API.


🎨 Options de style#

Les valeurs buildingStyleId et environmentId peuvent être sélectionnées via le point de terminaison Configuration des styles de l'API.

À utiliser :

Texte brut
GET /api/v1/style/exterior_renovator/getStyles
Groupe de stylesChamp de la requêteDescription
buildingStylebuildingStyleIdOption de style de bâtiment
environmentenvironmentIdOption d'environnement ou de scène. Prend en charge plusieurs IDs d'option séparés par des virgules, par exemple id1,id2

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


📥 Exemples de requête#

cURL
bash
# Minimal request
curl -X POST "https://api.ideal.house/api/v1/exteriorRenovator/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "imageUrl": "https://example.com/exterior.jpg"
  }'

# Request with optional guidance
curl -X POST "https://api.ideal.house/api/v1/exteriorRenovator/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "imageUrl": "https://example.com/exterior.jpg",
    "prompt": "Modern farmhouse exterior with warm wood accents, black window frames, and clean landscaping",
    "referenceUrl": "https://example.com/reference-house.jpg",
    "buildingStyleId": "modern-farmhouse",
    "environmentId": "Architecture_Enviroment_Time_Night,Architecture_Enviroment_Time_Day"
  }'
Java (OkHttp)
java
import okhttp3.*;

import java.io.IOException;

public class ExteriorRenovatorApiExample {

    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/exterior.jpg",
                    "prompt": "Modern farmhouse exterior with warm wood accents, black window frames, and clean landscaping",
                    "referenceUrl": "https://example.com/reference-house.jpg",
                    "buildingStyleId": "modern-farmhouse",
                    "environmentId": "Architecture_Enviroment_Time_Night,Architecture_Enviroment_Time_Day"
                }
                """;

        Request request = new Request.Builder()
                .url(BASE_URL + "/api/v1/exteriorRenovator/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/exterior.jpg",
    "prompt": "Modern farmhouse exterior with warm wood accents, black window frames, and clean landscaping",
    "referenceUrl": "https://example.com/reference-house.jpg",
    "buildingStyleId": "modern-farmhouse",
    "environmentId": "Architecture_Enviroment_Time_Night,Architecture_Enviroment_Time_Day"
}

response = requests.post(
    f"{BASE_URL}/api/v1/exteriorRenovator/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 createExteriorRenovatorTask() {
  try {
    const response = await axios.post(
      `${BASE_URL}/api/v1/exteriorRenovator/generate`,
      {
        imageUrl: 'https://example.com/exterior.jpg',
        prompt: 'Modern farmhouse exterior with warm wood accents, black window frames, and clean landscaping',
        referenceUrl: 'https://example.com/reference-house.jpg',
        buildingStyleId: 'modern-farmhouse',
        environmentId: 'Architecture_Enviroment_Time_Night,Architecture_Enviroment_Time_Day'
      },
      {
        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);
  }
}

createExteriorRenovatorTask();

📤 Réponse#

Réponse réussie

json
{
  "code": 0,
  "message": "success",
  "data": 1234567890123456789
}
ChampTypeDescription
codeinteger0 indique le succès
messagestringMessage de réponse
datalongL'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 rénovation extérieure précédemment créée.

Point de terminaison

Texte brut
GET /api/v1/exteriorRenovator/result

En-têtes de requête

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

Paramètres de requête

ParamètreTypeObligatoireDescription
taskIdlong✅ OuiL'ID de tâche renvoyé par le point de terminaison de création

📥 Exemples de requête#

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

import java.io.IOException;

public class ExteriorRenovatorResultExample {

    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/exteriorRenovator/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/exteriorRenovator/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 failed")
Node.js (axios)
javascript
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/exteriorRenovator/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 failed');
      }
      break;
    }

    await new Promise(resolve => setTimeout(resolve, 3000));
  }
}

pollResult(1234567890123456789);

📤 Réponse#

Réponse réussie (tâche terminée)

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Success",
    "waitNumber": 0,
    "percentage": 100,
    "input": {
      "imageUrl": "https://example.com/exterior.jpg",
      "prompt": "Modern farmhouse exterior with warm wood accents, black window frames, and clean landscaping",
      "refImageUrl": "https://example.com/reference-house.jpg",
      "buildingStyleId": "modern-farmhouse",
      "environmentId": "Architecture_Enviroment_Time_Night,Architecture_Enviroment_Time_Day"
    },
    "output": {
      "resultUrl": "https://cdn.ideal.house/output/exterior_renovator_result.jpg",
      "width": 1024,
      "height": 1024
    }
  }
}

Réponse (tâche en cours de traitement / en file d'attente)

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

Réponse (tâche échouée)

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

Champs de la réponse

ChampTypeDescription
idlongIdentifiant unique de la tâche
statusstringÉtat actuel de la tâche (voir État de la tâche)
waitNumberintegerNombre de tâches qui précèdent cette tâche dans la file d’attente (0 signifie actuellement en cours de traitement)
percentageintegerPourcentage d'avancement de la tâche (0–100)
inputobjectLes paramètres d'entrée originaux de la tâche
input.imageUrlstringURL de l'image extérieure source
input.promptstringInstructions textuelles optionnelles, si fournies
input.refImageUrlstringURL facultative de l'image de référence, si fournie
input.buildingStyleIdstringID de style de bâtiment optionnel, si fourni
input.environmentIdstringID de style d'environnement ou de scène optionnel, si fourni. Peut contenir plusieurs IDs séparés par des virgules
outputobjectRésultat de la génération (disponible uniquement lorsque status est Success)
output.resultUrlstringURL vers l'image de résultat de la rénovation extérieure
output.widthintegerLargeur de sortie en pixels
output.heightintegerHauteur de sortie en pixels

📊 État de la tâche#

ÉtatDescription
UnprocessedLa tâche a été créée mais n'a pas encore démarré
ProcessingLa tâche est actuellement en cours de traitement
SuccessTâche terminée avec succès — la sortie est disponible
FailedLa tâche a échoué en raison d'une erreur

Interrogez toutes les 3-5 secondes. Consultez la Limite de tâches de l'API.


❌ Réponses d'erreur#

Toutes les réponses d'erreur partagent la même structure JSON :

json
{
  "code": 5002,
  "message": "Invalid API Key",
  "data": null
}

Référence des codes d'erreur#

CodeNomDescriptionAction suggérée
1001FAILEDÉchec de la requête (erreur générique)Consultez le champ message pour les détails spécifiques de l'erreur
1003INTERNAL_ERRORErreur interne du serveurRéessayez après un court délai ; contactez le support si le problème persiste
1011PARAM_ERRORErreur de paramètre de requêteAssurez-vous que les paramètres de requête sont correctement formatés
5002API_KEY_INVALIDClé API invalide ou manquanteAssurez-vous que l'en-tête APIKEY est présent et que la valeur est correcte
9010SCAN_TEXT_ERRORL'invite textuelle a échoué à l'examen de contenuModifiez l'invite pour supprimer tout contenu sensible ou interdit
9038PROHIBITED_CONTENTL'image de sortie générée contient un contenu interditAjustez l'invite/le style/les entrées et réessayez
9051COINS_NOT_ENOUGHCrédits / pièces insuffisantsRechargez les crédits de votre compte et réessayez. Consultez la Référence de déduction des crédits

📄 Pour la liste complète des codes d'erreur courants de l'API, reportez-vous à la Référence des codes d'erreur.