Documentación de la API de generación de planos de casas#
URL base:
https://api.ideal.house
Versión: v1
Actualizado: 2026-06-12
📖 Descripción general#
La API de generación de planos de casas te permite crear una lámina de presentación de planos de casa generados por IA basada en el estilo arquitectónico, el área, la configuración estructural y las preferencias de diseño interior. Tras la generación exitosa, la API produce exactamente 1 imagen compuesta de resultados por tarea. La imagen contiene planos de planta 2D coordinados, elevaciones exteriores y renderizados exteriores fotorrealistas en una sola lámina de presentación. El resultado se almacena en output.resultUrl y también se incluye como el único elemento en output.resultList. El flujo de trabajo es asincrónico e implica dos pasos:
- Crear una tarea — Envía los parámetros de tu plano de casa y recibe un
taskId. - Consultar resultados — Usa el
taskIdpara consultar el estado de la tarea y obtener las imágenes generadas.
🔐 Autenticación#
Todas las solicitudes de la API deben autenticarse con una Clave API.
Incluye tu Clave API en el encabezado de la solicitud:
| Encabezado | Valor |
|---|---|
APIKEY | your_api_key_here |
⚠️ Mantén tu Clave API segura. No la expongas en código del lado del cliente ni en repositorios públicos.
💰 Deducción de créditos#
[!WARNING] 🪙 Los créditos se deducen según el
modelTypeseleccionado tras la creación exitosa de la tarea. Si la tarea finalmente falla, los créditos deducidos se reembolsarán automáticamente a tu cuenta.
Un saldo insuficiente devolverá el código de error9051. 📄 Consulta la Referencia de deducción de créditos.
Modelo (modelType) | Créditos deducidos |
|---|---|
Base | 10 créditos |
Pro | 20 créditos |
📌 Endpoints de la API#
1. Crear Tarea de Plano de Casa#
Crea una nueva tarea de generación de plano de casa con IA y devuelve un taskId único para consultas.
Endpoint
POST /api/v1/housePlan/generate
Encabezados de la solicitud
| Encabezado | Obligatorio | Descripción |
|---|---|---|
APIKEY | ✅ Sí | Tu clave de autenticación API |
Content-Type | ✅ Sí | application/json |
Cuerpo de la solicitud
| Campo | Tipo | Requerido | Descripción | Predeterminado |
|---|---|---|---|---|
style | string / null | ✅ Sí | Nombre en inglés del estilo arquitectónico. Ver Opciones de Estilo | Barndominium |
stories | string | ✅ Sí | Número de plantas. Enum: 1, 2, 3+ | 2 |
bedrooms | string | ✅ Sí | Número de dormitorios. Enum: 1, 2, 3, 4, 5+ | 2 |
bathrooms | string | ✅ Sí | Número de baños. Enum: 1, 1.5, 2, 2.5, 3, 3.5, 4+ | 1 |
totalArea | string | ✅ Sí | Rango de área total en formato min-max unit. Ver Opciones de Área Total | 150-200 m² |
garageEnabled | boolean | ✅ Sí | Si se incluye un garaje | false |
garageType | string / null | ⚠️ Condicional | Requerido cuando garageEnabled=true. Ver Opciones de Tipo de Garaje | null |
garageCapacity | string / null | ⚠️ Condicional | Requerido cuando garageEnabled=true. Ver Capacidad del Garaje | null |
basement | string | ✅ Sí | Tipo de sótano. Ver Opciones de Sótano | None |
roofType | string / null | ❌ No | Tipo de estructura del techo. Ver Opciones de Tipo de Techo | null |
outdoorSpaces | array<string> | ❌ No | Áreas exteriores. Ver Opciones de Espacios Exteriores | [] |
layoutConcept | string / null | ❌ No | Concepto general de diseño interior. Ver Opciones de Concepto de Distribución | null |
bedroomAreaRanges | array<object> | ✅ Sí | Rangos de área de dormitorios. La longitud debe coincidir con el número de dormitorios. Ver Rangos de Área de Dormitorios | Ver ejemplo |
bathroomLayouts | array<object> | ✅ Sí | Selecciones de diseño de baños. La longitud debe ser Math.floor(bathrooms). Ver Diseños de Baño | Ver ejemplo |
kitchenLayout | string / null | ❌ No | Diseño de cocina. Ver Opciones de Cocina | null |
kitchenFeatureOptions | array<string> | ❌ No | Características opcionales de cocina. Ver Opciones de Cocina | [] |
keyRooms | string / null | ❌ No | Habitaciones especiales unidas por coma y espacio. Ver Opciones de Habitaciones Clave | null |
prompt | string | ❌ No | Indicación de texto personalizada para guiar adicionalmente la generación | "" |
refImageUrl | string | ❌ No | URL de una imagen de referencia de una casa para guiar el estilo | "" |
modelType | string | ✅ Sí | Tipo de calidad del modelo. Enum: Base, Pro. ⚠️ El modo Flash no está soportado | Base |
🖼️ Requisitos de imagen: La imagen de referencia opcional debe usar JPG/JPEG, PNG o WebP, no debe superar los 20 MB y debe tener dimensiones desde 128 × 128 px hasta 6,000 × 6,000 px (inclusive). Las imágenes que superen las dimensiones máximas en píxeles se escalan automáticamente de forma proporcional para ajustarse a 6,000 × 6,000 px antes del procesamiento. Su URL debe ser accesible directamente por el servidor API.
🎨 Opciones de estilo#
| Valor | Descripción |
|---|---|
Barndominium | Predeterminado. Casa híbrida con estructura metálica y estilo de granero |
Cabin | Estilo rústico de cabaña de madera |
Cape Cod | Estilo simétrico clásico de Nueva Inglaterra |
Coastal | Estilo ligero y aireado inspirado en la playa |
Colonial | Arquitectura colonial simétrica tradicional |
Contemporary | Líneas limpias y materiales modernos |
Craftsman | Detalles artesanales con materiales naturales |
Farmhouse | Estilo rústico de granja campestre |
French Country | Elegante estilo provincial francés |
Mediterranean | Estuco cálido con elementos de terracota |
Mid-Century Modern | Modernismo geométrico limpio de los años 1950–70 |
Modern | Diseño moderno minimalista plano/angular |
Ranch | Distribución extendida de una sola planta |
Shingle Style | Exterior continuo de tejas de madera |
Southwestern | Estilo desértico inspirado en adobe |
Transitional | Mezcla de tradicional y contemporáneo |
Tudor | Estilo inglés medieval con entramado de madera |
Victorian | Estilo decorativo ornamentado del siglo 19 |
📐 Opciones de Área Total#
El campo totalArea usa el formato min-max unit. Los valores métricos usan m²; los valores imperiales usan ft². El valor mínimo debe ser menor que el máximo en al menos un paso.
| Unidad | Mínimo | Máximo | Paso | Ejemplo |
|---|---|---|---|---|
m² | 50 | 500 | 10 | 150-200 m² |
ft² | 500 | 5000 | 100 | 1500-2000 ft² |
🏠 Opciones de Tipo de Techo#
| Valor | Descripción |
|---|---|
Gable roof | Techo tradicional con perfil triangular en punta |
Hip roof | Inclinaciones en los cuatro lados |
Flat roof | Techo plano con inclinación mínima |
Pitched roof | Techo generalmente inclinado |
🏗️ Opciones de Sótano#
| Valor | Descripción |
|---|---|
None | Sin sótano |
Partial | Sótano parcial |
Full | Sótano completo |
🚗 Opciones de Tipo de Garaje#
garageType se requiere solo cuando garageEnabled=true; de lo contrario envía null.
| Valor | Descripción |
|---|---|
Detached | Garaje independiente |
Front Entry | Entrada del garaje orientada al frente |
Side Entry | Entrada del garaje orientada al lateral |
Rear Entry | Entrada del garaje orientada a la parte trasera |
🚗 Capacidad del Garaje#
garageCapacity se requiere solo cuando garageEnabled=true; de lo contrario envía null.
| Valor | Descripción |
|---|---|
1 | Garaje para un coche |
2 | Garaje para dos coches |
3+ | Tres o más plazas de aparcamiento |
🌿 Opciones de Espacios Exteriores#
El campo outdoorSpaces acepta un arreglo de los siguientes valores.
| Valor | Descripción |
|---|---|
Front porch | Porche de entrada cubierto en el frente |
Covered patio | Terraza exterior cubierta |
Deck | terraza de madera o compuesta |
Balcony | Plataforma exterior elevada |
Courtyard | Patio exterior cerrado o semicerrado |
Breezeway | Pasillo cubierto que conecta estructuras |
Outdoor Kitchen | Área de cocina y comedor al aire libre |
Ejemplo
"outdoorSpaces": ["Front porch", "Deck", "Balcony"]
🏛️ Opciones de Concepto de Distribución#
| Valor | Descripción |
|---|---|
Open Concept | Espacios de estar conectados en concepto abierto |
Traditional | Habitaciones separadas con límites definidos |
Split-Level | Niveles de piso escalonados entre áreas |
🛏️ Rangos de Área de Dormitorios#
El campo bedroomAreaRanges debe ser un arreglo cuya longitud coincida con el conteo de bedrooms. Cada elemento usa la siguiente forma:
| Campo | Tipo | Descripción |
|---|---|---|
name | string | Nombre de visualización del dormitorio, por ejemplo Room 1 (Master) |
minArea | string | Área mínima del dormitorio. Debe ser una cadena numérica no negativa |
maxArea | string | Área máxima del dormitorio. Debe ser mayor o igual a minArea |
unit | string | Unidad de área. Enum: m², ft² |
Ejemplo predeterminado para bedrooms="2"
[
{ "name": "Room 1 (Master)", "minArea": "12", "maxArea": "18", "unit": "m²" },
{ "name": "Room 2", "minArea": "10", "maxArea": "14", "unit": "m²" }
]
🛁 Diseños de Baño#
El campo bathroomLayouts debe ser un arreglo cuya longitud sea Math.floor(bathrooms). Por ejemplo, bathrooms="2.5" requiere 2 objetos de diseño de baño.
| Campo | Tipo | Descripción |
|---|---|---|
name | string | Nombre de visualización del baño, por ejemplo Bathroom 1 |
layout | string / null | Enum: With Wet & Dry Separation, Without Separation o null |
Ejemplo predeterminado para bathrooms="1"
[
{ "name": "Bathroom 1", "layout": null }
]
🍳 Opciones de Cocina#
Diseño de Cocina
| Valor | Descripción |
|---|---|
Open Kitchen | Cocina abierta conectada a sala/comedor |
Closed Kitchen | Espacio de cocina cerrado y separado |
Opciones de Características de Cocina
| Valor | Descripción |
|---|---|
Eating Bar | Barra de comedor / asiento de mostrador |
Kitchen Island | Isla de cocina |
Breakfast Nook | Rincón de desayuno |
🚪 Opciones de Habitaciones Clave#
El campo keyRooms acepta uno o más de los siguientes valores. Al seleccionar varias opciones, une los valores con una coma (,).
| Valor | Descripción |
|---|---|
Home Office | Oficina o estudio dedicado en casa |
Bonus Room | Habitación bonus flexible de múltiples usos |
Media Room | Cine en casa o centro de medios |
Mudroom | Habitación de entrada para equipamiento exterior |
Laundry Room | Espacio dedicado de lavandería |
Guest Suite | Suite de dormitorio para huéspedes independiente |
Ejemplo
"keyRooms": "Home Office, Media Room, Guest Suite"
Tipos de Modelo
| Valor | Descripción |
|---|---|
Base | Predeterminado. Equilibrio entre velocidad y calidad. Genera una lámina de presentación compuesta de alta resolución |
Pro | Salida de mayor calidad y mayor resolución, más lenta |
⚠️ Nota: El modo
Flashno está disponible para esta API. Solo se admitenBaseyPro.
📥 Ejemplos de solicitud#
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();
📤 Respuesta#
Respuesta correcta
{
"code": 0,
"message": "success",
"data": 1234567890123456789
}
| Campo | Tipo | Descripción |
|---|---|---|
code | integer | 0 indica éxito |
message | string | Mensaje de la respuesta |
data | long | El ID único de la tarea para consultar los resultados |
2. Obtener resultado de la tarea#
Recupera el estado actual y la salida de una tarea de plano de casa creada previamente.
Endpoint
GET /api/v1/housePlan/result
Encabezados de la solicitud
| Encabezado | Obligatorio | Descripción |
|---|---|---|
APIKEY | ✅ Sí | Tu clave de autenticación API |
Parámetros de consulta
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
taskId | long | ✅ Sí | El ID de la tarea devuelto por el endpoint de creación |
📥 Ejemplos de solicitud#
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);
📤 Respuesta#
📸 Nota: Esta API genera exactamente 1 imagen compuesta de resultados por tarea exitosa. La imagen combina planos de planta 2D, elevaciones exteriores y renderizados exteriores fotorrealistas en una sola lámina de presentación. La
output.resultUrlcontiene la imagen compuesta URL, youtput.resultListcontiene el mismo URL como un arreglo de un solo elemento para compatibilidad.
Respuesta correcta (tarea completada)
{
"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
}
}
}
Respuesta (tarea en procesamiento / en cola)
{
"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
}
}
Respuesta (tarea fallida)
{
"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
}
}
Campos de la respuesta
| Campo | Tipo | Descripción |
|---|---|---|
id | long | Identificador único de la tarea |
status | string | Estado actual de la tarea (consulta Estado de la tarea) |
waitNumber | integer | Número de tareas por delante de la tarea actual en la cola (0 significa que se está procesando en este momento) |
percentage | integer | Porcentaje de finalización de la tarea (0–100) |
input | object | Los parámetros de entrada originales de la tarea |
input.style | string | Estilo arquitectónico |
input.totalArea | string | Rango de área total |
input.stories | string | Número de plantas |
input.bedrooms | string | Número de dormitorios |
input.bathrooms | string | Número de baños |
input.garageEnabled | boolean | Si se solicitó un garaje |
input.garageType | string / null | Tipo de garaje |
input.garageCapacity | string / null | Número de espacios de garaje |
input.basement | string | Tipo de sótano |
input.roofType | string | Tipo de techo |
input.outdoorSpaces | array<string> | Espacios exteriores |
input.layoutConcept | string | Concepto general de distribución |
input.bedroomAreaRanges | array<object> | Rangos de área de dormitorios |
input.bathroomLayouts | array<object> | Selecciones de diseño de baños |
input.kitchenLayout | string | Estilo de diseño de cocina |
input.kitchenFeatureOptions | array<string> | Características opcionales de cocina |
input.keyRooms | string | Habitaciones clave especiales (separadas por comas) |
input.prompt | string | Indicación de texto personalizada (si se proporciona) |
input.refImageUrl | string | URL de imagen de referencia (si se proporciona) |
input.modelType | string | Tipo de modelo utilizado |
output | object | Resultado de la generación (solo disponible cuando status es Success) |
output.resultUrl | string | URL a la lámina de presentación de planos de casa compuesta generada |
output.resultList | array<string> | URLs a imágenes de resultados generadas. Para House Plan, esto suele ser un arreglo de un solo elemento que contiene el mismo URL que output.resultUrl |
output.width | integer | Ancho de salida en píxeles |
output.height | integer | Alto de salida en píxeles |
📊 Estado de la tarea#
| Estado | Descripción |
|---|---|
Unprocessed | La tarea se ha creado pero aún no se ha iniciado |
Processing | La tarea se está procesando actualmente |
Success | La tarea se completó correctamente; la salida está disponible |
Failed | La tarea falló debido a un error |
Termination | La tarea fue interrumpida o finalizada |
Consulta cada 3-5 segundos. Consulta Límite de tareas de la API.
❌ Respuestas de error#
Todas las respuestas de error comparten la misma estructura JSON:
{
"code": 5002,
"message": "Invalid API Key",
"data": null
}
Referencia de códigos de error#
| Código | Nombre | Descripción | Acción sugerida |
|---|---|---|---|
1001 | FAILED | Error genérico en la solicitud | Comprueba el campo message para ver los detalles específicos del error |
1003 | INTERNAL_ERROR | Error interno del servidor | Inténtalo de nuevo tras un breve retraso; contacta con soporte si persiste |
1011 | PARAM_ERROR | Error de parámetro de solicitud | Verifica que todos los parámetros requeridos estén proporcionados y tengan un formato correcto |
5002 | API_KEY_INVALID | Clave API inválida o ausente | Asegúrate de que el encabezado APIKEY está presente y que el valor es correcto |
9010 | SCAN_TEXT_ERROR | El prompt de texto no pasó la revisión de contenido | Modifica el prompt para eliminar cualquier contenido sensible o prohibido |
9038 | PROHIBITED_CONTENT | La imagen de salida generada contiene contenido prohibido | Ajusta el prompt/estilo/entradas y reintenta |
9051 | COINS_NOT_ENOUGH | Monedas / créditos insuficientes | Recarga los créditos de tu cuenta e intenta de nuevo |
📄 Para la lista completa de códigos de error comunes de la API, consulta la Referencia de códigos de error.