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 :
- Créer une tâche — Soumettez les paramètres de votre plan de maison et recevez un
taskId. - Interrogation périodique pour obtenir les résultats — Utilisez le
taskIdpour 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ê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 |
|---|---|
Base | 10 crédits |
Pro | 20 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
POST /api/v1/housePlan/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 | Obligatoire | Description | Défaut |
|---|---|---|---|---|
style | string / null | ✅ Requis | Nom anglais du style architectural. Voir Options de style | Barndominium |
stories | string | ✅ Requis | Nombre de niveaux. Enum : 1, 2, 3+ | 2 |
bedrooms | string | ✅ Requis | Nombre de chambres. Enum : 1, 2, 3, 4, 5+ | 2 |
bathrooms | string | ✅ Requis | Nombre de salles de bain. Enum : 1, 1.5, 2, 2.5, 3, 3.5, 4+ | 1 |
totalArea | string | ✅ Requis | Fourchette de surface totale au format min-max unit. Voir Options de surface totale | 150-200 m² |
garageEnabled | boolean | ✅ Requis | Indique si un garage doit être inclus | false |
garageType | string / null | ⚠️ Conditionnel | Requis lorsque garageEnabled=true. Voir Options de type de garage | null |
garageCapacity | string / null | ⚠️ Conditionnel | Requis lorsque garageEnabled=true. Voir Capacité du garage | null |
basement | string | ✅ Requis | Type de sous-sol. Voir Options de sous-sol | None |
roofType | string / null | ❌ Non requis | Type de charpente de toit. Voir Options de type de toit | null |
outdoorSpaces | array<string> | ❌ Non requis | Espaces extérieurs. Voir Options d'espaces extérieurs | [] |
layoutConcept | string / null | ❌ Non requis | Concept global d'aménagement intérieur. Voir Options de concept d'agencement | null |
bedroomAreaRanges | array<object> | ✅ Requis | Fourchettes de surface des chambres. La longueur doit correspondre au nombre de chambres. Voir Fourchettes de surface des chambres | Voir exemple |
bathroomLayouts | array<object> | ✅ Requis | Sélections d'aménagement des salles de bain. La longueur doit être Math.floor(bathrooms). Voir Aménagements de salle de bain | Voir exemple |
kitchenLayout | string / null | ❌ Non requis | Aménagement de la cuisine. Voir Options de cuisine | null |
kitchenFeatureOptions | array<string> | ❌ Non requis | Options facultatives pour la cuisine. Voir Options de cuisine | [] |
keyRooms | string / null | ❌ Non requis | Pièces spéciales jointes par une virgule et un espace. Voir Options de pièces clés | null |
prompt | string | ❌ Non requis | Texte libre optionnel pour guider davantage la génération | "" |
refImageUrl | string | ❌ Non requis | URL d'une image de maison de référence pour guider le style | "" |
modelType | string | ✅ Requis | Type de qualité du modèle. Enum : Base, Pro. ⚠️ Le mode Flash n'est pas pris en charge | Base |
🖼️ 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#
| Valeur | Description |
|---|---|
Barndominium | Défaut. Maison hybride de style grange métallique |
Cabin | Style cabane en bois rustique |
Cape Cod | Style classique symétrique de la Nouvelle-Angleterre |
Coastal | Style léger et aéré inspiré de la plage |
Colonial | Architecture coloniale traditionnelle symétrique |
Contemporary | Lignes épurées et matériaux modernes |
Craftsman | Détails artisanaux avec matériaux naturels |
Farmhouse | Style rustique de ferme de campagne |
French Country | Style élégant de province française |
Mediterranean | Enduit chaleureux avec éléments en terre cuite |
Mid-Century Modern | Modernisme géométrique épuré des années 1950–70 |
Modern | Design moderne minimaliste plat/angulaire |
Ranch | Agencement étendu sur un seul niveau |
Shingle Style | Extérieur continu en bardeaux de bois |
Southwestern | Style désertique inspiré de l'adobe |
Transitional | Mélange de traditions et de contemporanéité |
Tudor | Style anglais médiéval à colombages |
Victorian | Style 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 m² ; les valeurs impériales utilisent ft². La valeur minimale doit être inférieure à la valeur maximale d'au moins un palier.
| Unité | Minimum | Maximum | Pas | Exemple |
|---|---|---|---|---|
m² | 50 | 500 | 10 | 150-200 m² |
ft² | 500 | 5000 | 100 | 1500-2000 ft² |
🏠 Options de type de toit#
| Valeur | Description |
|---|---|
Gable roof | Toit classique à pignons triangulaires |
Hip roof | Versants sur les quatre côtés |
Flat roof | Toit plat à pente minimale |
Pitched roof | Toit à pente raide général |
🏗️ Options de sous-sol#
| Valeur | Description |
|---|---|
None | Pas de sous-sol |
Partial | Sous-sol partiel |
Full | Sous-sol complet |
🚗 Options de type de garage#
garageType n'est requis que lorsque garageEnabled=true ; sinon envoyez null.
| Valeur | Description |
|---|---|
Detached | Garage détaché |
Front Entry | Entrée du garage orientée vers l'avant |
Side Entry | Entrée du garage orientée vers le côté |
Rear Entry | Entrée du garage orientée vers l'arrière |
🚗 Capacité du garage#
garageCapacity n'est requis que lorsque garageEnabled=true ; sinon envoyez null.
| Valeur | Description |
|---|---|
1 | Garage pour une voiture |
2 | Garage pour deux voitures |
3+ | Trois places ou plus |
🌿 Options d'espaces extérieurs#
Le champ outdoorSpaces accepte un tableau des valeurs suivantes.
| Valeur | Description |
|---|---|
Front porch | Porche d'entrée couvert à l'avant |
Covered patio | Terrasse extérieure couverte |
Deck | Terrasse en bois ou composite |
Balcony | Plateforme extérieure surélevée |
Courtyard | Cour extérieure close ou semi-fermée |
Breezeway | Passage couvert reliant des structures |
Outdoor Kitchen | Espace extérieur pour cuisiner et manger |
Exemple
"outdoorSpaces": ["Front porch", "Deck", "Balcony"]
🏛️ Options de concept d'agencement#
| Valeur | Description |
|---|---|
Open Concept | Espaces de vie ouverts et connectés |
Traditional | Pièces séparées aux limites définies |
Split-Level | Niveaux 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 :
| Champ | Type | Description |
|---|---|---|
name | string | Nom d'affichage de la chambre, par exemple Room 1 (Master) |
minArea | string | Surface minimale de la chambre. Doit être une chaîne numérique non négative |
maxArea | string | Surface maximale de la chambre. Doit être supérieure ou égale à minArea |
unit | string | Unité de surface. Enum : m², ft² |
Exemple par défaut pour bedrooms="2"
[
{ "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.
| Champ | Type | Description |
|---|---|---|
name | string | Nom d'affichage de la salle de bain, par exemple Bathroom 1 |
layout | string / null | Enum : With Wet & Dry Separation, Without Separation ou null |
Exemple par défaut pour bathrooms="1"
[
{ "name": "Bathroom 1", "layout": null }
]
🍳 Options de cuisine#
Agencement de la cuisine
| Valeur | Description |
|---|---|
Open Kitchen | Cuisine ouverte connectée au séjour/salle à manger |
Closed Kitchen | Espace cuisine séparé et fermé |
Options de caractéristiques de la cuisine
| Valeur | Description |
|---|---|
Eating Bar | Bar repas / plan de travail avec sièges |
Kitchen Island | Îlot de cuisine |
Breakfast Nook | Coin 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 (,).
| Valeur | Description |
|---|---|
Home Office | Bureau à domicile ou pièce de travail dédiée |
Bonus Room | Pièce polyvalente flexible |
Media Room | Salle de cinéma à domicile ou espace multimédia |
Mudroom | Entrée dédiée aux équipements de plein air |
Laundry Room | Espace buanderie dédié |
Guest Suite | Suite chambre d'amis autonome |
Exemple
"keyRooms": "Home Office, Media Room, Guest Suite"
Types de modèles
| Valeur | Description |
|---|---|
Base | Défaut. Vitesse et qualité équilibrées. Génère un tableau de présentation composite haute résolution |
Pro | Qualité et résolution plus élevées, plus lent |
⚠️ Remarque : Le mode
Flashn'est pas disponible pour cette API. SeulsBaseetProsont pris en charge.
📥 Exemples de requête#
cURL
# 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)
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)
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)
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
{
"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 le statut et la sortie actuels d'une tâche de plan de maison précédemment créée.
Point de terminaison
GET /api/v1/housePlan/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/housePlan/result?taskId=1234567890123456789" \
-H "APIKEY: your_api_key_here"
Java (OkHttp)
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)
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)
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.resultUrlcontient l'URL de l'image composite, et leoutput.resultListcontient la même URL sous forme de tableau à un seul élément pour la compatibilité.
Réponse de succès (tâche terminée)
{
"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)
{
"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)
{
"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
| 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.style | string | Style architectural |
input.totalArea | string | Fourchette de surface totale |
input.stories | string | Nombre de niveaux |
input.bedrooms | string | Nombre de chambres |
input.bathrooms | string | Nombre de salles de bain |
input.garageEnabled | boolean | Indique si un garage a été demandé |
input.garageType | string / null | Type de garage |
input.garageCapacity | string / null | Nombre de places de garage |
input.basement | string | Type de sous-sol |
input.roofType | string | Type de toit |
input.outdoorSpaces | array<string> | Espaces extérieurs |
input.layoutConcept | string | Concept global d'agencement |
input.bedroomAreaRanges | array<object> | Fourchettes de surface des chambres |
input.bathroomLayouts | array<object> | Sélections d'aménagement des salles de bain |
input.kitchenLayout | string | Style d'agencement de la cuisine |
input.kitchenFeatureOptions | array<string> | Caractéristiques facultatives de la cuisine |
input.keyRooms | string | Pièces spéciales clés (séparées par des virgules) |
input.prompt | string | Texte libre personnalisé (le cas échéant) |
input.refImageUrl | string | URL de l'image de maison de référence (le cas échéant) |
input.modelType | string | Type de modèle utilisé |
output | object | Résultat de la génération (disponible uniquement lorsque status est Success) |
output.resultUrl | string | URL vers le tableau de présentation composite généré du plan de maison |
output.resultList | array<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.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 |
Termination | La 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 :
{
"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.