Ideal House
Aller au contenu principal

Documentation de l'API de génération de plans de maison#

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


📖 Vue d'ensemble#

L'API de génération de plans de maison vous permet de créer un tableau de présentation de plan de maison généré par IA, basé sur le style architectural, la superficie, la configuration structurelle et les préférences d'aménagement intérieur. Une fois la génération effectuée avec succès, l'API produit exactement 1 image composite de résultat par tâche. L'image contient des plans d'étage 2D coordonnés, des élévations extérieures et des rendus extérieurs photoréalistes intégrés dans un seul tableau de présentation. Le résultat est stocké dans output.resultUrl et inclus comme unique élément dans output.resultList. Le traitement est asynchrone et comprend deux étapes :

  1. Créer une tâche — Soumettez les paramètres de votre plan de maison et recevez un taskId.
  2. Interrogation périodique pour obtenir les résultats — Utilisez le taskId pour interroger le statut de la tâche et récupérer les images générées.

🔐 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

⚠️ 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 modelType sé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'erreur 9051. 📄 Consultez Référence de déduction des crédits.

Modèle (modelType)Crédits déduits
Base10 crédits
Pro20 crédits

📌 Points de terminaison de l'API#


1. Créer une tâche de plan de maison#

Crée une nouvelle tâche de génération de plan de maison par IA et renvoie un taskId unique pour l'interrogation périodique.

Point de terminaison

Texte brut
POST /api/v1/housePlan/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

ChampTypeObligatoireDescriptionDéfaut
stylestring / null✅ RequisNom anglais du style architectural. Voir Options de styleBarndominium
storiesstring✅ RequisNombre de niveaux. Enum : 1, 2, 3+2
bedroomsstring✅ RequisNombre de chambres. Enum : 1, 2, 3, 4, 5+2
bathroomsstring✅ RequisNombre de salles de bain. Enum : 1, 1.5, 2, 2.5, 3, 3.5, 4+1
totalAreastring✅ RequisFourchette de surface totale au format min-max unit. Voir Options de surface totale150-200 m²
garageEnabledboolean✅ RequisIndique si un garage doit être inclusfalse
garageTypestring / null⚠️ ConditionnelRequis lorsque garageEnabled=true. Voir Options de type de garagenull
garageCapacitystring / null⚠️ ConditionnelRequis lorsque garageEnabled=true. Voir Capacité du garagenull
basementstring✅ RequisType de sous-sol. Voir Options de sous-solNone
roofTypestring / null❌ Non requisType de charpente de toit. Voir Options de type de toitnull
outdoorSpacesarray<string>❌ Non requisEspaces extérieurs. Voir Options d'espaces extérieurs[]
layoutConceptstring / null❌ Non requisConcept global d'aménagement intérieur. Voir Options de concept d'agencementnull
bedroomAreaRangesarray<object>✅ RequisFourchettes de surface des chambres. La longueur doit correspondre au nombre de chambres. Voir Fourchettes de surface des chambresVoir exemple
bathroomLayoutsarray<object>✅ RequisSélections d'aménagement des salles de bain. La longueur doit être Math.floor(bathrooms). Voir Aménagements de salle de bainVoir exemple
kitchenLayoutstring / null❌ Non requisAménagement de la cuisine. Voir Options de cuisinenull
kitchenFeatureOptionsarray<string>❌ Non requisOptions facultatives pour la cuisine. Voir Options de cuisine[]
keyRoomsstring / null❌ Non requisPièces spéciales jointes par une virgule et un espace. Voir Options de pièces clésnull
promptstring❌ Non requisTexte libre optionnel pour guider davantage la génération""
refImageUrlstring❌ Non requisURL d'une image de maison de référence pour guider le style""
modelTypestring✅ RequisType de qualité du modèle. Enum : Base, Pro. ⚠️ Le mode Flash n'est pas pris en chargeBase

🖼️ Exigences relatives à l'image: L'image de référence facultative doit utiliser le format JPG/JPEG, PNG ou WebP, ne pas dépasser 20 Mo, et avoir 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 redimensionnées proportionnellement pour respecter 6,000 × 6,000 px avant traitement. Son URL doit être directement accessible par le serveur API.


🎨 Options de style#

ValeurDescription
BarndominiumDéfaut. Maison hybride de style grange métallique
CabinStyle cabane en bois rustique
Cape CodStyle classique symétrique de la Nouvelle-Angleterre
CoastalStyle léger et aéré inspiré de la plage
ColonialArchitecture coloniale traditionnelle symétrique
ContemporaryLignes épurées et matériaux modernes
CraftsmanDétails artisanaux avec matériaux naturels
FarmhouseStyle rustique de ferme de campagne
French CountryStyle élégant de province française
MediterraneanEnduit chaleureux avec éléments en terre cuite
Mid-Century ModernModernisme géométrique épuré des années 1950–70
ModernDesign moderne minimaliste plat/angulaire
RanchAgencement étendu sur un seul niveau
Shingle StyleExtérieur continu en bardeaux de bois
SouthwesternStyle désertique inspiré de l'adobe
TransitionalMélange de traditions et de contemporanéité
TudorStyle anglais médiéval à colombages
VictorianStyle décoratif orné du 19e siècle

📐 Options de surface totale#

Le champ totalArea utilise le format min-max unit. Les valeurs métriques utilisent ; les valeurs impériales utilisent ft². La valeur minimale doit être inférieure à la valeur maximale d'au moins un palier.

UnitéMinimumMaximumPasExemple
5050010150-200 m²
ft²50050001001500-2000 ft²

🏠 Options de type de toit#

ValeurDescription
Gable roofToit classique à pignons triangulaires
Hip roofVersants sur les quatre côtés
Flat roofToit plat à pente minimale
Pitched roofToit à pente raide général

🏗️ Options de sous-sol#

ValeurDescription
NonePas de sous-sol
PartialSous-sol partiel
FullSous-sol complet

🚗 Options de type de garage#

garageType n'est requis que lorsque garageEnabled=true ; sinon envoyez null.

ValeurDescription
DetachedGarage détaché
Front EntryEntrée du garage orientée vers l'avant
Side EntryEntrée du garage orientée vers le côté
Rear EntryEntrée du garage orientée vers l'arrière

🚗 Capacité du garage#

garageCapacity n'est requis que lorsque garageEnabled=true ; sinon envoyez null.

ValeurDescription
1Garage pour une voiture
2Garage pour deux voitures
3+Trois places ou plus

🌿 Options d'espaces extérieurs#

Le champ outdoorSpaces accepte un tableau des valeurs suivantes.

ValeurDescription
Front porchPorche d'entrée couvert à l'avant
Covered patioTerrasse extérieure couverte
DeckTerrasse en bois ou composite
BalconyPlateforme extérieure surélevée
CourtyardCour extérieure close ou semi-fermée
BreezewayPassage couvert reliant des structures
Outdoor KitchenEspace extérieur pour cuisiner et manger

Exemple

Texte brut
"outdoorSpaces": ["Front porch", "Deck", "Balcony"]

🏛️ Options de concept d'agencement#

ValeurDescription
Open ConceptEspaces de vie ouverts et connectés
TraditionalPièces séparées aux limites définies
Split-LevelNiveaux de sol décalés entre les espaces

🛏️ Plages de Surface de Chambre#

Le champ bedroomAreaRanges doit être un tableau dont la longueur correspond au nombre de bedrooms. Chaque élément utilise la forme suivante :

ChampTypeDescription
namestringNom d'affichage de la chambre, par exemple Room 1 (Master)
minAreastringSurface minimale de la chambre. Doit être une chaîne numérique non négative
maxAreastringSurface maximale de la chambre. Doit être supérieure ou égale à minArea
unitstringUnité de surface. Enum : , ft²

Exemple par défaut pour bedrooms="2"

json
[
  { "name": "Room 1 (Master)", "minArea": "12", "maxArea": "18", "unit": "m²" },
  { "name": "Room 2", "minArea": "10", "maxArea": "14", "unit": "m²" }
]

🛁 Aménagements de salle de bain#

Le champ bathroomLayouts doit être un tableau dont la longueur est Math.floor(bathrooms). Par exemple, bathrooms="2.5" nécessite 2 objets d'aménagement de salle de bain.

ChampTypeDescription
namestringNom d'affichage de la salle de bain, par exemple Bathroom 1
layoutstring / nullEnum : With Wet & Dry Separation, Without Separation ou null

Exemple par défaut pour bathrooms="1"

json
[
  { "name": "Bathroom 1", "layout": null }
]

🍳 Options de cuisine#

Agencement de la cuisine

ValeurDescription
Open KitchenCuisine ouverte connectée au séjour/salle à manger
Closed KitchenEspace cuisine séparé et fermé

Options de caractéristiques de la cuisine

ValeurDescription
Eating BarBar repas / plan de travail avec sièges
Kitchen IslandÎlot de cuisine
Breakfast NookCoin déjeuner

🚪 Options de pièces clés#

Le champ keyRooms accepte une ou plusieurs des valeurs suivantes. Lors de la sélection de plusieurs options, joignez-les par une virgule (,).

ValeurDescription
Home OfficeBureau à domicile ou pièce de travail dédiée
Bonus RoomPièce polyvalente flexible
Media RoomSalle de cinéma à domicile ou espace multimédia
MudroomEntrée dédiée aux équipements de plein air
Laundry RoomEspace buanderie dédié
Guest SuiteSuite chambre d'amis autonome

Exemple

Texte brut
"keyRooms": "Home Office, Media Room, Guest Suite"

Types de modèles

ValeurDescription
BaseDéfaut. Vitesse et qualité équilibrées. Génère un tableau de présentation composite haute résolution
ProQualité et résolution plus élevées, plus lent

⚠️ Remarque : Le mode Flash n'est pas disponible pour cette API. Seuls Base et Pro sont pris en charge.


📥 Exemples de requête#

cURL
bash
# Basic request with default values
curl -X POST "https://api.ideal.house/api/v1/housePlan/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "style": "Barndominium",
    "stories": "2",
    "bedrooms": "2",
    "bathrooms": "1",
    "totalArea": "150-200 m²",
    "garageEnabled": false,
    "garageType": null,
    "garageCapacity": null,
    "basement": "None",
    "roofType": null,
    "outdoorSpaces": [],
    "layoutConcept": null,
    "bedroomAreaRanges": [
      { "name": "Room 1 (Master)", "minArea": "12", "maxArea": "18", "unit": "m²" },
      { "name": "Room 2", "minArea": "10", "maxArea": "14", "unit": "m²" }
    ],
    "bathroomLayouts": [
      { "name": "Bathroom 1", "layout": null }
    ],
    "kitchenLayout": null,
    "kitchenFeatureOptions": [],
    "keyRooms": null,
    "prompt": "",
    "refImageUrl": "",
    "modelType": "Base"
  }'

# Pro model with reference image and custom prompt
curl -X POST "https://api.ideal.house/api/v1/housePlan/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "style": "Victorian",
    "stories": "3+",
    "bedrooms": "5+",
    "bathrooms": "4+",
    "totalArea": "300-380 m²",
    "garageEnabled": true,
    "garageType": "Front Entry",
    "garageCapacity": "3+",
    "basement": "Full",
    "roofType": "Gable roof",
    "outdoorSpaces": ["Front porch", "Balcony", "Courtyard", "Outdoor Kitchen"],
    "layoutConcept": "Traditional",
    "bedroomAreaRanges": [
      { "name": "Room 1 (Master)", "minArea": "18", "maxArea": "28", "unit": "m²" },
      { "name": "Room 2", "minArea": "12", "maxArea": "16", "unit": "m²" },
      { "name": "Room 3", "minArea": "12", "maxArea": "16", "unit": "m²" },
      { "name": "Room 4", "minArea": "10", "maxArea": "14", "unit": "m²" },
      { "name": "Room 5", "minArea": "10", "maxArea": "14", "unit": "m²" }
    ],
    "bathroomLayouts": [
      { "name": "Bathroom 1", "layout": "With Wet & Dry Separation" },
      { "name": "Bathroom 2", "layout": "With Wet & Dry Separation" },
      { "name": "Bathroom 3", "layout": "Without Separation" },
      { "name": "Bathroom 4", "layout": null }
    ],
    "kitchenLayout": "Closed Kitchen",
    "kitchenFeatureOptions": ["Kitchen Island", "Breakfast Nook"],
    "keyRooms": "Home Office, Bonus Room, Media Room, Guest Suite",
    "prompt": "Grand Victorian mansion with ornate details and wraparound porch",
    "refImageUrl": "https://example.com/reference-house.jpg",
    "modelType": "Pro"
  }'
Java (OkHttp)
java
import okhttp3.*;
import java.io.IOException;

public class HousePlanApiExample {

    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 = """
            {
                "style": "Barndominium",
                "stories": "2",
                "bedrooms": "2",
                "bathrooms": "1",
                "totalArea": "150-200 m²",
                "garageEnabled": false,
                "garageType": null,
                "garageCapacity": null,
                "basement": "None",
                "roofType": null,
                "outdoorSpaces": [],
                "layoutConcept": null,
                "bedroomAreaRanges": [
                    { "name": "Room 1 (Master)", "minArea": "12", "maxArea": "18", "unit": "m²" },
                    { "name": "Room 2", "minArea": "10", "maxArea": "14", "unit": "m²" }
                ],
                "bathroomLayouts": [
                    { "name": "Bathroom 1", "layout": null }
                ],
                "kitchenLayout": null,
                "kitchenFeatureOptions": [],
                "keyRooms": null,
                "prompt": "",
                "refImageUrl": "",
                "modelType": "Base"
            }
            """;

        Request request = new Request.Builder()
            .url(BASE_URL + "/api/v1/housePlan/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 = {
    "style": "Barndominium",
    "stories": "2",
    "bedrooms": "2",
    "bathrooms": "1",
    "totalArea": "150-200 m²",
    "garageEnabled": False,
    "garageType": None,
    "garageCapacity": None,
    "basement": "None",
    "roofType": None,
    "outdoorSpaces": [],
    "layoutConcept": None,
    "bedroomAreaRanges": [
        { "name": "Room 1 (Master)", "minArea": "12", "maxArea": "18", "unit": "m²" },
        { "name": "Room 2", "minArea": "10", "maxArea": "14", "unit": "m²" }
    ],
    "bathroomLayouts": [
        { "name": "Bathroom 1", "layout": None }
    ],
    "kitchenLayout": None,
    "kitchenFeatureOptions": [],
    "keyRooms": None,
    "prompt": "",
    "refImageUrl": "",
    "modelType": "Base"
}

response = requests.post(
    f"{BASE_URL}/api/v1/housePlan/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 createHousePlanTask() {
  try {
    const response = await axios.post(
      `${BASE_URL}/api/v1/housePlan/generate`,
      {
        style: 'Barndominium',
        stories: '2',
        bedrooms: '2',
        bathrooms: '1',
        totalArea: '150-200 m²',
        garageEnabled: false,
        garageType: null,
        garageCapacity: null,
        basement: 'None',
        roofType: null,
        outdoorSpaces: [],
        layoutConcept: null,
        bedroomAreaRanges: [
          { name: 'Room 1 (Master)', minArea: '12', maxArea: '18', unit: 'm²' },
          { name: 'Room 2', minArea: '10', maxArea: '14', unit: 'm²' }
        ],
        bathroomLayouts: [
          { name: 'Bathroom 1', layout: null }
        ],
        kitchenLayout: null,
        kitchenFeatureOptions: [],
        keyRooms: null,
        prompt: '',
        refImageUrl: '',
        modelType: 'Base'
      },
      {
        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);
  }
}

createHousePlanTask();

📤 Réponse#

Réponse de succès

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 le statut et la sortie actuels d'une tâche de plan de maison précédemment créée.

Point de terminaison

Texte brut
GET /api/v1/housePlan/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✅ 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/housePlan/result?taskId=1234567890123456789" \
  -H "APIKEY: your_api_key_here"
Java (OkHttp)
java
import okhttp3.*;
import java.io.IOException;

public class HousePlanResultExample {

    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/housePlan/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

# Poll until task is complete
while True:
    response = requests.get(
        f"{BASE_URL}/api/v1/housePlan/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", "Termination"):
        break

    time.sleep(3)  # Poll every 3 seconds

if status == "Success":
    output = result["output"]
    print("Composite Result URL:", output["resultUrl"])
    print("Result List:", output.get("resultList", []))
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 pollResult(taskId) {
  const headers = { 'APIKEY': API_KEY };

  while (true) {
    const response = await axios.get(
      `${BASE_URL}/api/v1/housePlan/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', 'Termination'].includes(status)) {
      if (status === 'Success') {
        console.log('Composite Result URL:', result.output.resultUrl);
        console.log('Result List:', result.output.resultList);
      } 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#

📸 Remarque : Cette API génère exactement 1 image composite de résultat par tâche réussie. L'image combine des plans d'étage 2D, des élévations extérieures et des rendus extérieurs photoréalistes dans un seul tableau de présentation. Le output.resultUrl contient l'URL de l'image composite, et le output.resultList contient la même URL sous forme de tableau à un seul élément pour la compatibilité.

Réponse de succès (tâche terminée)

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Success",
    "waitNumber": 0,
    "percentage": 100,
    "input": {
      "style": "Barndominium",
      "stories": "2",
      "bedrooms": "2",
      "bathrooms": "1",
      "totalArea": "150-200 m²",
      "garageEnabled": false,
      "garageType": null,
      "garageCapacity": null,
      "basement": "None",
      "roofType": null,
      "outdoorSpaces": [],
      "layoutConcept": null,
      "bedroomAreaRanges": [
        { "name": "Room 1 (Master)", "minArea": "12", "maxArea": "18", "unit": "m²" },
        { "name": "Room 2", "minArea": "10", "maxArea": "14", "unit": "m²" }
      ],
      "bathroomLayouts": [
        { "name": "Bathroom 1", "layout": null }
      ],
      "kitchenLayout": null,
      "kitchenFeatureOptions": [],
      "keyRooms": null,
      "prompt": "",
      "refImageUrl": "",
      "modelType": "Base"
    },
    "output": {
      "resultUrl": "https://cdn.ideal.house/output/house_plan_composite.jpg",
      "resultList": [
        "https://cdn.ideal.house/output/house_plan_composite.jpg"
      ],
      "width": 2560,
      "height": 1440
    }
  }
}

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": 45,
    "input": {
      "style": "Barndominium",
      "stories": "2",
      "bedrooms": "2",
      "bathrooms": "1",
      "totalArea": "150-200 m²",
      "garageEnabled": false,
      "garageType": null,
      "garageCapacity": null,
      "basement": "None",
      "roofType": null,
      "outdoorSpaces": [],
      "layoutConcept": null,
      "bedroomAreaRanges": [
        { "name": "Room 1 (Master)", "minArea": "12", "maxArea": "18", "unit": "m²" },
        { "name": "Room 2", "minArea": "10", "maxArea": "14", "unit": "m²" }
      ],
      "bathroomLayouts": [
        { "name": "Bathroom 1", "layout": null }
      ],
      "kitchenLayout": null,
      "kitchenFeatureOptions": [],
      "keyRooms": null,
      "prompt": "",
      "refImageUrl": "",
      "modelType": "Base"
    },
    "output": null
  }
}

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

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Failed",
    "waitNumber": 0,
    "percentage": 0,
    "input": {
      "style": "Barndominium",
      "stories": "2",
      "bedrooms": "2",
      "bathrooms": "1",
      "totalArea": "150-200 m²",
      "garageEnabled": false,
      "basement": "None",
      "modelType": "Base"
    },
    "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.stylestringStyle architectural
input.totalAreastringFourchette de surface totale
input.storiesstringNombre de niveaux
input.bedroomsstringNombre de chambres
input.bathroomsstringNombre de salles de bain
input.garageEnabledbooleanIndique si un garage a été demandé
input.garageTypestring / nullType de garage
input.garageCapacitystring / nullNombre de places de garage
input.basementstringType de sous-sol
input.roofTypestringType de toit
input.outdoorSpacesarray<string>Espaces extérieurs
input.layoutConceptstringConcept global d'agencement
input.bedroomAreaRangesarray<object>Fourchettes de surface des chambres
input.bathroomLayoutsarray<object>Sélections d'aménagement des salles de bain
input.kitchenLayoutstringStyle d'agencement de la cuisine
input.kitchenFeatureOptionsarray<string>Caractéristiques facultatives de la cuisine
input.keyRoomsstringPièces spéciales clés (séparées par des virgules)
input.promptstringTexte libre personnalisé (le cas échéant)
input.refImageUrlstringURL de l'image de maison de référence (le cas échéant)
input.modelTypestringType de modèle utilisé
outputobjectRésultat de la génération (disponible uniquement lorsque status est Success)
output.resultUrlstringURL vers le tableau de présentation composite généré du plan de maison
output.resultListarray<string>URLs vers les images de résultat générées. Pour la génération de plans de maison, il s'agit normalement d'un tableau à un seul élément contenant la même URL que output.resultUrl
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
TerminationLa tâche a été interrompue ou terminée

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 :

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

Référence des codes d'erreur#

CodeNomDescriptionAction recommandé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 bref délai ; contactez le support si le problème persiste
1011PARAM_ERRORErreur de paramètre de demandeVérifiez que tous les paramètres requis sont fournis et 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 du contenu interditAjustez l'invite/le style/les entrées et réessayez
9051COINS_NOT_ENOUGHCrédits / pièces insuffisantsAlimentez 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.