Enviar un lote de productos#
POST https://sdkapi.ideal.house/product-import/products
Cuerpo de la solicitud#
| Campo | Tipo | Obligatorio | Restricciones | Descripción |
|---|---|---|---|---|
shopId | string | Sí | Máximo 64 caracteres | Shop ID proporcionado por Ideal House. |
products | array | Sí | 1–500 elementos | Productos que crear o actualizar. |
processImages | boolean | No | Predeterminado false | Se aplica a todo el lote. Establecer en true para procesar imágenes de productos. Cuando se omite o es false, se importan los datos del producto y se usan las imágenes originales sin procesamiento. |
processFloorImages | boolean | No | Predeterminado false | Requiere processImages: true. Para productos Floor, genera imágenes individuales de tablas a partir de imageUrl. Se ignora cuando el procesamiento de imágenes está deshabilitado o para otros tipos de producto. |
Envía processImages como un booleano en formato JSON (true o false), no como una cadena como "true" o "false". Las integraciones existentes que necesiten preprocesamiento de imágenes deben enviar explícitamente processImages: true.
Campos del producto#
| Campo | Tipo | Obligatorio | Longitud máxima | Descripción |
|---|---|---|---|---|
sku | string | Sí | 120 | Identificador único del producto dentro de la tienda. El mismo SKU actualiza el producto existente. |
name | string | Sí | 255 | Nombre del producto. |
imageUrl | string | Sí | 1,000 | URL de origen accesible públicamente HTTP o HTTPS para la imagen del producto. |
productUrl | string | Sí | 1,000 | URL HTTP o HTTPS de la página de detalles del producto. |
width | string or number | Sí | 64 | Ancho del producto. Los valores sin unidad se interpretan en pulgadas; las unidades compatibles se convierten a pulgadas. |
length | string or number | No | 64 | Largo del producto. Para productos Floor, puede proporcionarse en lugar de height y se usa como largo de la tabla. |
height | string or number | Condicional | 64 | Altura del producto. Obligatorio excepto cuando un producto Floor proporciona length. Los valores sin unidad se interpretan en pulgadas. |
thickness | string or number | No | 64 | Grosor o rango de grosor del producto, convertido a pulgadas cuando se proporciona. |
dimension_display | string | No | 120 | Texto de dimensión solo para visualización, como "24 in x 36 in" o "26 cm x 36 cm". |
category | string | No | 120 | Categoría del producto en tu catálogo. |
color | string | No | 120 | Color del producto. |
brand | string | No | 120 | Marca del producto. |
productType | string | Sí | 120 | Uno de los nombres compatibles de tipo de producto que se enumeran a continuación. |
status | string | No | — | Uno de active, inactive, out_of_stock o invalid. Predeterminado active. |
groupId | string | No | 120 | Identificador definido por el cliente para agrupar productos relacionados. |
Reimportar productos existentes#
Para actualizar los datos del producto, envíalo nuevamente a través de POST /product-import/products. Los productos se emparejan por shopId y sku. Cuando el mismo SKU ya existe en la tienda, el registro del producto existente se actualiza en lugar de crear uno duplicado, y los valores proporcionados por la importación más reciente sobrescriben los valores almacenados correspondientes, incluidos campos como name, las URLs del producto, el estado y las dimensiones.
El endpoint de importación por lotes no admite actualizaciones parciales. Cada elemento enviado debe cumplir todas las reglas de los campos obligatorios del producto, incluso cuando el SKU ya existe.
El SKU es la identidad de importación y no puede cambiarse de nombre mediante la reimportación. Enviar un SKU diferente crea o actualiza un producto diferente. Para reemplazar un SKU, elimina lógicamente el producto antiguo e importa el producto bajo el nuevo SKU.
La información del producto se actualiza incluso cuando la imagen no ha cambiado. El procesamiento de imágenes es opcional en cada envío: establece processImages: true cuando sea necesario. Un producto importado previamente sin procesamiento de imágenes puede enviarse nuevamente con esta opción habilitada.
Tipos de producto admitidos#
La API acepta los siguientes valores exactos de productType, que distinguen entre mayúsculas y minúsculas. Los distintos nombres de una misma fila son alias del mismo tipo de producto de Ideal House.
| Tipo de producto Ideal House | Valores productType aceptados |
|---|---|
| Papel tapiz | "Wall", "Wallpaper" |
| Alfombras | "Rugs", "Area Rugs", "Area Rug" |
| Arte de pared | "Wall Art" |
| Muebles | "Furniture" |
| Mural | "Mural", "Wall Mural" |
| Calcomanías | "Decals" |
| Piso | "Floor" |
Por ejemplo, "Rugs", "Area Rugs" y "Area Rug" son válidos y se tratan como el mismo tipo de producto. Cualquier valor no listado arriba devuelve 400 Bad Request.
Estado de importación#
El campo opcional status acepta los siguientes valores exactos:
| Valor | Significado |
|---|---|
active | Importa el producto y su imagen. Establece processImages: true si se necesita procesamiento de imágenes. Este es el valor predeterminado cuando se omite status. |
inactive | Se omite el procesamiento. El producto se almacena con status: inactive y availability: inactive. |
out_of_stock | Se omite el procesamiento. El producto se almacena con status: inactive y availability: out_of_stock. |
invalid | Se omite el procesamiento. El producto se almacena con status: invalid y availability: invalid. |
Cualquier otro valor, incluido sold_out, devuelve 400 Bad Request.
Para Muebles, los envíos no activos devuelven el producto status: inactive. Un envío activo puede devolver unprocessed, lo que significa que el producto aún no está listo para su visualización. Esto no significa que se haya solicitado la generación de 3D.
Generación de modelos 3D para muebles#
La generación de modelos 3D para muebles es lenta y consume créditos, por lo que no se realiza durante la importación del producto, incluso cuando processImages es true. Planeamos ofrecer una acción de generación en la interfaz de usuario o una API independiente para generar modelos 3D en el futuro. Si necesitas modelos 3D ahora, envía un correo electrónico a tu contacto de Ideal House para que podamos organizar la generación por separado.
SKU y comportamiento de actualización#
Ideal House identifica un producto por la combinación de shopId y sku:
- Si el SKU no existe para la tienda, se crea un producto nuevo.
- Si el SKU ya existe para la tienda, se actualiza el producto existente.
Esto hace seguro volver a enviar un producto con el mismo SKU después de un resultado de red incierto. Usa SKUs estables y no generes un nuevo SKU al reintentar el mismo producto. Evita enviar el mismo SKU más de una vez en un solo lote.
Requisitos de imagen#
- La URL debe ser accesible por los servidores de Ideal House sin cookies, sesiones de inicio de sesión ni encabezados de solicitud personalizados.
- Usa una URL estable que devuelva la imagen directamente.
- Mantén la imagen fuente disponible hasta que el trabajo de importación alcance un estado terminal.
- Los problemas de descarga o procesamiento de imágenes se reportan como fallas a nivel de elemento.
- Para crear imágenes de tablas de Floor, establece tanto
processImages: truecomoprocessFloorImages: true.
Procesamiento de imágenes opcional y créditos#
El preprocesamiento de imágenes está deshabilitado de forma predeterminada:
- Con
processImages: falseo cuando el campo se omite, los productos activos usan sus imágenes originales sin eliminación de fondo, optimización de textura ni división de imágenes de materiales de suelo. La información del producto sigue importándose o actualizándose, y no se cobra ningún crédito de procesamiento de imágenes. Los productos no activos siguen las reglas de estado descritas anteriormente. - Con
processImages: true, los productos activos compatibles reciben el procesamiento de imágenes descrito a continuación. La generación de modelos 3D para muebles no está incluida.
Los principales comportamientos de procesamiento son:
| Tipo de producto API | Procesamiento de imágenes |
|---|---|
Wall, Wallpaper | Elimina los bordes blancos exteriores y reduce la iluminación desigual y las sombras para mejorar el mosaico repetido. El fondo permanece opaco. No se garantizan texturas perfectamente continuas ni corrección de perspectiva. |
Rugs, Area Rugs, Area Rug | Elimina el fondo blanco y las sombras circundantes mientras preserva los patrones de alfombra blancos o de colores claros. Limpia y suaviza los bordes y recorta los márgenes vacíos para una imagen de producto con fondo transparente. |
Wall Art (Decoración de pared) | Elimina el fondo circundante de obras de arte enmarcadas y decoraciones de pared irregulares. Preserva el contenido blanco dentro de obras regulares y recorta los márgenes vacíos para una imagen de producto con fondo transparente. |
Mural y Wall Mural reciben las mismas mejoras de imagen que Wall. Para obtener mejores resultados, proporciona imágenes completas y claras del producto; las alfombras y el arte de pared regular deben tener fondos blancos o casi blancos, y las imágenes de pared deben evitar una distorsión de perspectiva severa.
El procesamiento de imágenes descrito anteriormente cuesta 1 crédito por imagen procesada por primera vez, incluida la optimización de texturas de Pared. Si se puede reutilizar un resultado procesado existente, no se cobra ningún crédito adicional de procesamiento. Asegúrate de tener créditos suficientes antes de habilitar esta opción. Con créditos insuficientes, el procesamiento de imágenes no se llevará a cabo y el producto puede permanecer unprocessed. Un lote de importación con estado completed no confirma por sí mismo que todas las imágenes de producto se procesaron correctamente.
Requisitos de dimensión#
La API no tiene un campo separado de unidad de dimensión. width es obligatorio. height normalmente es requerido, mientras que un producto Floor puede proporcionar length en su lugar; cuando ambos están presentes, length se usa como el largo de la tabla del piso. Los números sin unidad y las cadenas numéricas se interpretan como pulgadas. Las cadenas pueden incluir in, ft, cm, mm o m; los valores se validan como dimensiones positivas y se normalizan a pulgadas antes del almacenamiento. thickness es opcional y también acepta un rango como "3-4 mm", que se normaliza a "0.1-0.2 in".
dimension_display es una etiqueta de visualización opcional y no se usa para validación de tamaño ni conversión de unidades. Puede usar la unidad y el formato que desees mostrar al cliente, por ejemplo "24 in x 36 in" o "26 cm x 36 cm".
Ejemplo de solicitud#
{
"shopId": "shop_123",
"processImages": false,
"processFloorImages": false,
"products": [
{
"sku": "SKU-10001",
"name": "Gold Wall Mirror",
"imageUrl": "https://cdn.example.com/products/SKU-10001.png",
"productUrl": "https://www.example.com/products/SKU-10001",
"width": "24.0 in",
"height": "36.0 in",
"thickness": "2.0 in",
"dimension_display": "24 in x 36 in",
"category": "Mirror",
"color": "Gold",
"brand": "Example Brand",
"productType": "Wall Art",
"status": "active",
"groupId": "mirror-series-01"
},
{
"sku": "SKU-10002",
"name": "Black Wall Mirror",
"imageUrl": "https://cdn.example.com/products/SKU-10002.png",
"productUrl": "https://www.example.com/products/SKU-10002",
"width": "2 ft",
"height": "3 ft",
"thickness": "3-4 mm",
"dimension_display": "2 ft x 3 ft",
"category": "Mirror",
"color": "Black",
"brand": "Example Brand",
"productType": "Wall Art",
"status": "out_of_stock",
"groupId": "mirror-series-01"
}
]
}
Ejemplo cURL (procesamiento de imágenes habilitado)#
Este ejemplo habilita explícitamente el preprocesamiento de imágenes. Un nuevo resultado de eliminación de fondo consume 1 crédito.
curl --request POST \
'https://sdkapi.ideal.house/product-import/products' \
--header 'Content-Type: application/json' \
--header 'X-Client-Id: <YOUR_CLIENT_ID>' \
--header 'X-Client-Secret: <YOUR_CLIENT_SECRET>' \
--data-raw '{
"shopId": "shop_123",
"processImages": true,
"products": [
{
"sku": "SKU-10001",
"name": "Gold Wall Mirror",
"imageUrl": "https://cdn.example.com/products/SKU-10001.png",
"productUrl": "https://www.example.com/products/SKU-10001",
"width": 24,
"height": 36,
"thickness": 2,
"dimension_display": "24 in x 36 in",
"category": "Mirror",
"color": "Gold",
"brand": "Example Brand",
"productType": "Wall Art",
"status": "active",
"groupId": "mirror-series-01"
}
]
}'
Respuesta aceptada#
Una solicitud válida devuelve 202 Accepted. El procesamiento continúa de forma asíncrona.
{
"jobId": "1930000000000000000",
"shopId": "shop_123",
"status": "pending",
"totalCount": 1,
"processedCount": 0,
"successCount": 0,
"failedCount": 0,
"failures": [],
"createdAt": "2026-07-21T06:30:00.000Z",
"startedAt": null,
"updatedAt": "2026-07-21T06:30:00.000Z",
"completedAt": null,
"error": null
}
Si la tienda ya tiene un trabajo en estado pending o running, la API devuelve 409 Conflict. Espera a que el trabajo actual termine antes de enviar otro lote.