Ideal House
Saltar al contenido

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:

  1. Crear una tarea — Envía los parámetros de tu plano de casa y recibe un taskId.
  2. Consultar resultados — Usa el taskId para 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:

EncabezadoValor
APIKEYyour_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 modelType seleccionado 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 error 9051. 📄 Consulta la Referencia de deducción de créditos.

Modelo (modelType)Créditos deducidos
Base10 créditos
Pro20 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

Texto plano
POST /api/v1/housePlan/generate

Encabezados de la solicitud

EncabezadoObligatorioDescripción
APIKEY✅ SíTu clave de autenticación API
Content-Type✅ Síapplication/json

Cuerpo de la solicitud

CampoTipoRequeridoDescripciónPredeterminado
stylestring / null✅ SíNombre en inglés del estilo arquitectónico. Ver Opciones de EstiloBarndominium
storiesstring✅ SíNúmero de plantas. Enum: 1, 2, 3+2
bedroomsstring✅ SíNúmero de dormitorios. Enum: 1, 2, 3, 4, 5+2
bathroomsstring✅ SíNúmero de baños. Enum: 1, 1.5, 2, 2.5, 3, 3.5, 4+1
totalAreastring✅ SíRango de área total en formato min-max unit. Ver Opciones de Área Total150-200 m²
garageEnabledboolean✅ SíSi se incluye un garajefalse
garageTypestring / null⚠️ CondicionalRequerido cuando garageEnabled=true. Ver Opciones de Tipo de Garajenull
garageCapacitystring / null⚠️ CondicionalRequerido cuando garageEnabled=true. Ver Capacidad del Garajenull
basementstring✅ SíTipo de sótano. Ver Opciones de SótanoNone
roofTypestring / null❌ NoTipo de estructura del techo. Ver Opciones de Tipo de Techonull
outdoorSpacesarray<string>❌ NoÁreas exteriores. Ver Opciones de Espacios Exteriores[]
layoutConceptstring / null❌ NoConcepto general de diseño interior. Ver Opciones de Concepto de Distribuciónnull
bedroomAreaRangesarray<object>✅ SíRangos de área de dormitorios. La longitud debe coincidir con el número de dormitorios. Ver Rangos de Área de DormitoriosVer ejemplo
bathroomLayoutsarray<object>✅ SíSelecciones de diseño de baños. La longitud debe ser Math.floor(bathrooms). Ver Diseños de BañoVer ejemplo
kitchenLayoutstring / null❌ NoDiseño de cocina. Ver Opciones de Cocinanull
kitchenFeatureOptionsarray<string>❌ NoCaracterísticas opcionales de cocina. Ver Opciones de Cocina[]
keyRoomsstring / null❌ NoHabitaciones especiales unidas por coma y espacio. Ver Opciones de Habitaciones Clavenull
promptstring❌ NoIndicación de texto personalizada para guiar adicionalmente la generación""
refImageUrlstring❌ NoURL de una imagen de referencia de una casa para guiar el estilo""
modelTypestring✅ SíTipo de calidad del modelo. Enum: Base, Pro. ⚠️ El modo Flash no está soportadoBase

🖼️ 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#

ValorDescripción
BarndominiumPredeterminado. Casa híbrida con estructura metálica y estilo de granero
CabinEstilo rústico de cabaña de madera
Cape CodEstilo simétrico clásico de Nueva Inglaterra
CoastalEstilo ligero y aireado inspirado en la playa
ColonialArquitectura colonial simétrica tradicional
ContemporaryLíneas limpias y materiales modernos
CraftsmanDetalles artesanales con materiales naturales
FarmhouseEstilo rústico de granja campestre
French CountryElegante estilo provincial francés
MediterraneanEstuco cálido con elementos de terracota
Mid-Century ModernModernismo geométrico limpio de los años 1950–70
ModernDiseño moderno minimalista plano/angular
RanchDistribución extendida de una sola planta
Shingle StyleExterior continuo de tejas de madera
SouthwesternEstilo desértico inspirado en adobe
TransitionalMezcla de tradicional y contemporáneo
TudorEstilo inglés medieval con entramado de madera
VictorianEstilo decorativo ornamentado del siglo 19

📐 Opciones de Área Total#

El campo totalArea usa el formato min-max unit. Los valores métricos usan ; los valores imperiales usan ft². El valor mínimo debe ser menor que el máximo en al menos un paso.

UnidadMínimoMáximoPasoEjemplo
5050010150-200 m²
ft²50050001001500-2000 ft²

🏠 Opciones de Tipo de Techo#

ValorDescripción
Gable roofTecho tradicional con perfil triangular en punta
Hip roofInclinaciones en los cuatro lados
Flat roofTecho plano con inclinación mínima
Pitched roofTecho generalmente inclinado

🏗️ Opciones de Sótano#

ValorDescripción
NoneSin sótano
PartialSótano parcial
FullSótano completo

🚗 Opciones de Tipo de Garaje#

garageType se requiere solo cuando garageEnabled=true; de lo contrario envía null.

ValorDescripción
DetachedGaraje independiente
Front EntryEntrada del garaje orientada al frente
Side EntryEntrada del garaje orientada al lateral
Rear EntryEntrada del garaje orientada a la parte trasera

🚗 Capacidad del Garaje#

garageCapacity se requiere solo cuando garageEnabled=true; de lo contrario envía null.

ValorDescripción
1Garaje para un coche
2Garaje 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.

ValorDescripción
Front porchPorche de entrada cubierto en el frente
Covered patioTerraza exterior cubierta
Deckterraza de madera o compuesta
BalconyPlataforma exterior elevada
CourtyardPatio exterior cerrado o semicerrado
BreezewayPasillo cubierto que conecta estructuras
Outdoor KitchenÁrea de cocina y comedor al aire libre

Ejemplo

Texto plano
"outdoorSpaces": ["Front porch", "Deck", "Balcony"]

🏛️ Opciones de Concepto de Distribución#

ValorDescripción
Open ConceptEspacios de estar conectados en concepto abierto
TraditionalHabitaciones separadas con límites definidos
Split-LevelNiveles 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:

CampoTipoDescripción
namestringNombre de visualización del dormitorio, por ejemplo Room 1 (Master)
minAreastringÁrea mínima del dormitorio. Debe ser una cadena numérica no negativa
maxAreastringÁrea máxima del dormitorio. Debe ser mayor o igual a minArea
unitstringUnidad de área. Enum: , ft²

Ejemplo predeterminado para bedrooms="2"

json
[
  { "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.

CampoTipoDescripción
namestringNombre de visualización del baño, por ejemplo Bathroom 1
layoutstring / nullEnum: With Wet & Dry Separation, Without Separation o null

Ejemplo predeterminado para bathrooms="1"

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

🍳 Opciones de Cocina#

Diseño de Cocina

ValorDescripción
Open KitchenCocina abierta conectada a sala/comedor
Closed KitchenEspacio de cocina cerrado y separado

Opciones de Características de Cocina

ValorDescripción
Eating BarBarra de comedor / asiento de mostrador
Kitchen IslandIsla de cocina
Breakfast NookRincó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 (,).

ValorDescripción
Home OfficeOficina o estudio dedicado en casa
Bonus RoomHabitación bonus flexible de múltiples usos
Media RoomCine en casa o centro de medios
MudroomHabitación de entrada para equipamiento exterior
Laundry RoomEspacio dedicado de lavandería
Guest SuiteSuite de dormitorio para huéspedes independiente

Ejemplo

Texto plano
"keyRooms": "Home Office, Media Room, Guest Suite"

Tipos de Modelo

ValorDescripción
BasePredeterminado. Equilibrio entre velocidad y calidad. Genera una lámina de presentación compuesta de alta resolución
ProSalida de mayor calidad y mayor resolución, más lenta

⚠️ Nota: El modo Flash no está disponible para esta API. Solo se admiten Base y Pro.


📥 Ejemplos de solicitud#

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();

📤 Respuesta#

Respuesta correcta

json
{
  "code": 0,
  "message": "success",
  "data": 1234567890123456789
}
CampoTipoDescripción
codeinteger0 indica éxito
messagestringMensaje de la respuesta
datalongEl 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

Texto plano
GET /api/v1/housePlan/result

Encabezados de la solicitud

EncabezadoObligatorioDescripción
APIKEY✅ SíTu clave de autenticación API

Parámetros de consulta

ParámetroTipoObligatorioDescripción
taskIdlong✅ SíEl ID de la tarea devuelto por el endpoint de creación

📥 Ejemplos de solicitud#

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);

📤 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.resultUrl contiene la imagen compuesta URL, y output.resultList contiene el mismo URL como un arreglo de un solo elemento para compatibilidad.

Respuesta correcta (tarea completada)

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
    }
  }
}

Respuesta (tarea en procesamiento / en cola)

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
  }
}

Respuesta (tarea fallida)

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
  }
}

Campos de la respuesta

CampoTipoDescripción
idlongIdentificador único de la tarea
statusstringEstado actual de la tarea (consulta Estado de la tarea)
waitNumberintegerNúmero de tareas por delante de la tarea actual en la cola (0 significa que se está procesando en este momento)
percentageintegerPorcentaje de finalización de la tarea (0–100)
inputobjectLos parámetros de entrada originales de la tarea
input.stylestringEstilo arquitectónico
input.totalAreastringRango de área total
input.storiesstringNúmero de plantas
input.bedroomsstringNúmero de dormitorios
input.bathroomsstringNúmero de baños
input.garageEnabledbooleanSi se solicitó un garaje
input.garageTypestring / nullTipo de garaje
input.garageCapacitystring / nullNúmero de espacios de garaje
input.basementstringTipo de sótano
input.roofTypestringTipo de techo
input.outdoorSpacesarray<string>Espacios exteriores
input.layoutConceptstringConcepto general de distribución
input.bedroomAreaRangesarray<object>Rangos de área de dormitorios
input.bathroomLayoutsarray<object>Selecciones de diseño de baños
input.kitchenLayoutstringEstilo de diseño de cocina
input.kitchenFeatureOptionsarray<string>Características opcionales de cocina
input.keyRoomsstringHabitaciones clave especiales (separadas por comas)
input.promptstringIndicación de texto personalizada (si se proporciona)
input.refImageUrlstringURL de imagen de referencia (si se proporciona)
input.modelTypestringTipo de modelo utilizado
outputobjectResultado de la generación (solo disponible cuando status es Success)
output.resultUrlstringURL a la lámina de presentación de planos de casa compuesta generada
output.resultListarray<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.widthintegerAncho de salida en píxeles
output.heightintegerAlto de salida en píxeles

📊 Estado de la tarea#

EstadoDescripción
UnprocessedLa tarea se ha creado pero aún no se ha iniciado
ProcessingLa tarea se está procesando actualmente
SuccessLa tarea se completó correctamente; la salida está disponible
FailedLa tarea falló debido a un error
TerminationLa 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:

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

Referencia de códigos de error#

CódigoNombreDescripciónAcción sugerida
1001FAILEDError genérico en la solicitudComprueba el campo message para ver los detalles específicos del error
1003INTERNAL_ERRORError interno del servidorInténtalo de nuevo tras un breve retraso; contacta con soporte si persiste
1011PARAM_ERRORError de parámetro de solicitudVerifica que todos los parámetros requeridos estén proporcionados y tengan un formato correcto
5002API_KEY_INVALIDClave API inválida o ausenteAsegúrate de que el encabezado APIKEY está presente y que el valor es correcto
9010SCAN_TEXT_ERROREl prompt de texto no pasó la revisión de contenidoModifica el prompt para eliminar cualquier contenido sensible o prohibido
9038PROHIBITED_CONTENTLa imagen de salida generada contiene contenido prohibidoAjusta el prompt/estilo/entradas y reintenta
9051COINS_NOT_ENOUGHMonedas / créditos insuficientesRecarga 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.