Saltar al contenido principal

API de Gestión de Productos

La API de Gestión de Productos permite administrar la información de productos en la plataforma Nilo. Estos endpoints ayudan a crear, actualizar y recuperar datos de productos, incluyendo detalles del producto, imágenes y configuraciones de visualización.

Entendiendo los Productos

Los productos en Nilo representan artículos disponibles para la venta en diferentes tiendas:

  • Estructura del Producto

    • Código interno único para identificación (coincide con ERP)
    • Nombre y descripción para visualización
    • Asociaciones con marcas y categorías
    • Configuraciones de visualización para diferentes presentaciones de unidades
    • Imágenes (principal y adicionales)
    • Estado para habilitar/deshabilitar visibilidad
  • Jerarquía del Producto

    • Los productos pertenecen a marcas y categorías
    • Soportan múltiples configuraciones de visualización
    • Mantienen su propio estado y visibilidad
    • Pueden gestionarse individualmente o por lotes

Consideraciones Importantes

  1. Códigos Únicos: Cada producto requiere un código interno único que coincida con su sistema ERP
  2. Configuraciones de Visualización: Los productos pueden tener múltiples presentaciones de unidades (ej., unidad individual, paquete de 6)
  3. Gestión de Imágenes: Los productos admiten una imagen principal y imágenes adicionales
  4. Marca y Categoría: Los productos deben estar asociados con marcas y categorías válidas
  5. Control de Estado: Los productos pueden ser habilitados o deshabilitados sin eliminación

Operaciones de Producto Individual

Crear Producto

POST/product

Crea un nuevo producto en la plataforma Nilo. Este endpoint se utiliza para registrar todos los detalles del producto, incluyendo:

  • Información del producto (nombre, descripción, códigos)
  • Asociaciones de marca y categoría
  • Configuraciones de visualización (unidades, visualización predeterminada)
  • Imágenes del producto

Parámetros del Cuerpo de la Solicitud

ParámetroTipoRequeridoDescripción
namestringNombre del producto
internalCodestringCódigo del producto (igual que en ERP)
descriptionstringDescripción del producto
brandInternalCodestringCódigo de marca (igual que en ERP)
categoryInternalCodestringCódigo de categoría (igual que en ERP)
displayProductsarrayArray de configuraciones de visualización (ver abajo)
mainImagestringNoURL pública de la imagen principal del producto
imagesarrayNoArray de URLs públicas de imágenes adicionales
codeDUNstringNoCódigo DUN (igual que en ERP)
codeUPCstringNoCódigo UPC (igual que en ERP)
weightintegerNoPosición en la lista de ordenación
Gestión de Imágenes

Los campos mainImage e images esperan URLs públicas y accesibles. Durante el procesamiento, Nilo descargará las imágenes, las almacenará en servidores de Nilo y las distribuirá a través de una CDN para carga optimizada. Usa imágenes de alta calidad - la plataforma generará automáticamente versiones optimizadas para diferentes dispositivos.

Configuración de Visualización del Producto

ParámetroTipoRequeridoDescripción
defaultbooleanSi esta es la visualización predeterminada
unitsintegerNúmero de unidades en esta configuración de visualización
internalCodestringNoCódigo específico de la visualización
codeDUNstringNoCódigo DUN para esta visualización (igual que en ERP)
codeUPCstringNoCódigo UPC para esta visualización (igual que en ERP)

Actualizar o Crear Producto (Upsert)

PUT/product

Crea o actualiza un producto en la plataforma Nilo. Este endpoint es útil cuando necesitas:

  • Crear un nuevo producto si no existe
  • Actualizar un producto existente con nueva información
  • Mantener la consistencia de productos entre múltiples sistemas

Parámetros del Cuerpo de la Solicitud

ParámetroTipoRequeridoDescripción
internalCodestringCódigo del producto (igual que en ERP)
namestringNombre del producto
descriptionstringDescripción del producto
brandInternalCodestringCódigo de marca (igual que en ERP)
categoryInternalCodestringCódigo de categoría (igual que en ERP)
displayProductsarrayArray de configuraciones de visualización
enabledbooleanIndica si el producto está activo
mainImagestringNoURL pública de la imagen principal del producto
imagesarrayNoArray de URLs públicas de imágenes adicionales
codeDUNstringNoCódigo DUN (igual que en ERP)
codeUPCstringNoCódigo UPC (igual que en ERP)
weightintegerNoPosición en la lista de ordenación
Gestión de Imágenes

Los campos mainImage e images esperan URLs públicas y accesibles. Durante el procesamiento, Nilo descargará las imágenes, las almacenará en servidores de Nilo y las distribuirá a través de una CDN para carga optimizada.

Ejemplo del Cuerpo de la Solicitud

{
"internalCode": "12345",
"name": "Bebida 1L",
"description": "Bebida refrescante 1L",
"brandInternalCode": "brand1",
"categoryInternalCode": "category1",
"displayProducts": [
{
"default": true,
"units": 1,
"internalCode": "12345.1"
}
],
"enabled": true,
"mainImage": "https://image.jpg",
"images": ["https://image1.jpg"]
}

Códigos de Respuesta

CódigoDescripción
200Producto actualizado correctamente
400Parámetros inválidos
401Acceso no autorizado

Ejemplo de Uso

const headers = {
Authorization: "TU_TOKEN_DE_AUTH",
"x-api-key": "TU_API_KEY",
"Content-Type": "application/json",
};

const data = {
internalCode: "12345",
name: "Bebida 1L",
description: "Bebida refrescante 1L",
brandInternalCode: "brand1",
categoryInternalCode: "category1",
displayProducts: [
{
default: true,
units: 1,
internalCode: "12345.1",
},
],
enabled: true,
mainImage: "https://image.jpg",
images: ["https://image1.jpg"],
};

fetch("https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/product", {
method: "PUT",
headers: headers,
body: JSON.stringify(data),
})
.then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));

Obtener Todos los Productos

GET/product

Recupera una lista paginada de todos los productos. Útil para:

  • Navegar por el catálogo de productos
  • Implementar paginación en tu aplicación
  • Filtrar productos por estado activo/inactivo

Parámetros de Consulta

ParámetroTipoRequeridoDescripción
takenumberNoItems por página (default: 50, máximo: 50)
pagestringNoNúmero de página (default: 1)
enabledbooleanNoFiltrar por estado activo/inactivo
cursorstringNoCursor para paginación. Primer llamado usar 0, luego usar el cursor de la respuesta anterior

Ejemplo de Respuesta

{
"data": [
{
"name": "Bebida 1L",
"internalCode": "12345",
"description": "Bebida refrescante 1L",
"mainImage": "https://image.jpg",
"images": ["https://image1.jpg"],
"brand": {
"name": "Marca 1",
"internalCode": "brand1"
},
"category": {
"name": "Bebidas",
"internalCode": "category1"
},
"displayProducts": [
{
"default": true,
"units": 1,
"internalCode": "12345.1"
}
]
}
],
"page": {
"pageBased": {
"count": 100
},
"cursorBased": {
"hasNextPage": true,
"hasPreviousPage": false,
"firstCursor": "0",
"lastCursor": "49"
}
}
}

Ejemplo de Uso

const headers = {
Authorization: "TU_TOKEN_DE_AUTH",
"x-api-key": "TU_API_KEY",
};

fetch(
"https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/product?take=10&page=1&enabled=true",
{
method: "GET",
headers: headers,
}
)
.then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));

Obtener Detalles de Producto

GET/product/{code}

Obtiene información detallada de un producto específico. Incluye:

  • Metadatos del producto
  • Información de marca y categoría
  • Todas las configuraciones de visualización
  • Imágenes del producto

Parámetros de Ruta

ParámetroTipoDescripción
codestringCódigo interno del producto (igual que en ERP)

Ejemplo de Respuesta

{
"name": "Bebida 1L",
"internalCode": "12345",
"description": "Bebida refrescante 1L",
"mainImage": "https://image.jpg",
"images": ["https://image1.jpg"],
"brand": {
"name": "Marca 1",
"internalCode": "brand1"
},
"category": {
"name": "Bebidas",
"internalCode": "category1"
},
"displayProducts": [
{
"default": true,
"units": 1,
"internalCode": "12345.1"
}
]
}

Ejemplo de Uso

const headers = {
Authorization: "TU_TOKEN_DE_AUTH",
"x-api-key": "TU_API_KEY",
};

fetch(
"https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/product/12345",
{
method: "GET",
headers: headers,
}
)
.then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));

Cambiar Estado de Producto

PUT/product/{code}/status

Actualiza el estado de un producto o visualización específica. Permite:

  • Activar/desactivar un producto
  • Actualizar estado de configuraciones de visualización específicas
  • Gestionar visibilidad del producto en catálogos

Parámetros de Ruta

ParámetroTipoRequeridoDescripción
codestringCódigo interno del producto (igual que en ERP)

Parámetros del Cuerpo de la Solicitud

ParámetroTipoRequeridoDescripción
enabledbooleanEstado activo/inactivo del producto
unitsintegerNoUnidades específicas a actualizar

Ejemplo del Cuerpo de la Solicitud

{
"enabled": true,
"units": 1
}

Códigos de Respuesta

CódigoDescripción
200Estado actualizado correctamente
400Parámetros inválidos
404Producto no encontrado

Ejemplo de Uso

const headers = {
Authorization: "TU_TOKEN_DE_AUTH",
"x-api-key": "TU_API_KEY",
"Content-Type": "application/json",
};

const data = {
enabled: true,
units: 1,
};

fetch(
"https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/product/12345/status",
{
method: "PUT",
headers: headers,
body: JSON.stringify(data),
}
)
.then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));

Operaciones por Lotes

Operaciones Masivas de Productos

POST/batch/product

Realiza operaciones masivas en productos. Permite:

  • Crear múltiples productos nuevos
  • Actualizar productos existentes
  • Actualizar o crear productos (upsert)

La operación se procesa de forma asíncrona. Recibirás confirmación inmediata y las actualizaciones se procesarán en segundo plano.

Gestión de Imágenes

Los campos mainImage e images esperan URLs públicas y accesibles. Durante el procesamiento, Nilo descargará las imágenes, las almacenará en servidores de Nilo y las distribuirá a través de una CDN para carga optimizada.

Parámetros del Cuerpo de la Solicitud

ParámetroTipoDescripción
createarrayArray de productos a crear
updatearrayArray de productos a actualizar
upsertarrayArray de productos a actualizar o crear

Cada producto en los arrays soporta los siguientes campos: internalCode, name, description, brandInternalCode, categoryInternalCode, displayProducts, enabled, mainImage, images, codeDUN, codeUPC, weight.

Ejemplo del Cuerpo de la Solicitud

{
"create": [
{
"name": "Nuevo Producto",
"internalCode": "67890",
"description": "Descripción del nuevo producto",
"brandInternalCode": "brand2",
"categoryInternalCode": "category2",
"enabled": true,
"mainImage": "https://image.jpg",
"images": ["https://image1.jpg"],
"displayProducts": [
{
"default": true,
"units": 1,
"internalCode": "67890.1"
}
]
}
],
"update": [
{
"internalCode": "12345",
"name": "Nombre Actualizado",
"description": "Descripción actualizada",
"brandInternalCode": "brand2",
"categoryInternalCode": "category2",
"enabled": true,
"mainImage": "https://image.jpg",
"images": ["https://image1.jpg"],
"displayProducts": [
{
"default": true,
"units": 1,
"internalCode": "12345.1"
}
]
}
],
"upsert": [
{
"internalCode": "12345",
"name": "Nombre Actualizado",
"description": "Descripción actualizada",
"brandInternalCode": "brand2",
"categoryInternalCode": "category2",
"enabled": true,
"mainImage": "https://image.jpg",
"images": ["https://image1.jpg"],
"displayProducts": [
{
"default": true,
"units": 1,
"internalCode": "12345.1"
}
]
}
]
}

Códigos de Respuesta

CódigoDescripción
202Solicitud aceptada para procesar
400Parámetros inválidos
401Acceso no autorizado

Ejemplo de Uso

const headers = {
Authorization: "TU_TOKEN_DE_AUTH",
"x-api-key": "TU_API_KEY",
"Content-Type": "application/json",
};

const data = {
upsert: [
{
internalCode: "12345",
name: "Nombre Actualizado",
description: "Descripción actualizada",
brandInternalCode: "brand2",
categoryInternalCode: "category2",
enabled: true,
mainImage: "https://image.jpg",
images: ["https://image1.jpg"],
displayProducts: [
{
default: true,
units: 1,
internalCode: "12345.1",
},
],
},
],
};

fetch(
"https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/batch/product",
{
method: "POST",
headers: headers,
body: JSON.stringify(data),
}
)
.then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));

Tipos de Respuesta

Respuesta Exitosa

{
"code": 200,
"message": "Operación exitosa"
}

Respuesta de Operación por Lotes

{
"code": 202,
"batchIds": {
"create": ["550e8400-e29b-41d4-a716-446655440000"],
"update": [],
"upsert": []
},
"message": "Procesamiento por lotes iniciado"
}

Respuesta de Error

{
"code": 400,
"message": "Parámetros inválidos"
}

Mejores Prácticas

  1. Gestión de Productos

    • Usar convenciones de nombres consistentes
    • Mantener descripciones precisas de productos
    • Mantener actualizadas las asociaciones de marca y categoría
    • Implementar gestión adecuada de estados
  2. Configuración de Visualización

    • Definir presentaciones claras de unidades
    • Establecer visualizaciones predeterminadas apropiadas
    • Mantener códigos internos consistentes
    • Documentar configuraciones de unidades
  3. Manejo de Imágenes

    • Usar imágenes de producto de alta calidad
    • Mantener dimensiones de imagen consistentes
    • Implementar optimización de imágenes
    • Mantener actualizadas todas las vistas del producto
  4. Optimización de Rendimiento

    • Usar operaciones por lotes para múltiples actualizaciones
    • Implementar estrategias de caché adecuadas
    • Optimizar entrega de imágenes
    • Monitorear patrones de uso de API

Casos de Uso Comunes

  1. Configuración Inicial de Producto

    • Crear información básica del producto
    • Configurar unidades de visualización
    • Subir imágenes del producto
    • Establecer asociaciones de marca y categoría
  2. Mantenimiento de Producto

    • Actualizar información del producto
    • Gestionar visibilidad del producto
    • Actualizar configuraciones de visualización
    • Actualizar imágenes del producto
  3. Operaciones Masivas

    • Importar múltiples productos
    • Actualizar estados de productos
    • Modificar configuraciones de visualización
    • Sincronizar datos de productos
  4. Integración de Producto

    • Conectar con sistemas de inventario
    • Implementar búsqueda de productos
    • Configurar visualizaciones de productos
    • Configurar filtrado de productos

Guías de Implementación

  1. Creación de Producto

    • Validar todos los campos requeridos
    • Verificar códigos duplicados
    • Procesar imágenes del producto
    • Establecer configuraciones predeterminadas
  2. Actualizaciones de Producto

    • Verificar existencia del producto
    • Manejar actualizaciones parciales
    • Gestionar cambios de imagen
    • Actualizar entidades relacionadas
  3. Gestión de Visualización

    • Manejar configuraciones de unidades
    • Actualizar visualizaciones predeterminadas
    • Mantener códigos de visualización
    • Validar valores de unidades
  4. Procesamiento por Lotes

    • Validar datos por lotes
    • Manejar fallos parciales
    • Implementar rollback
    • Reportar resultados por lotes

Seguridad

Todos los endpoints de la API requieren dos tipos de autenticación:

  1. API Key en el encabezado: x-api-key
  2. Token de autorización en el encabezado: Authorization

Permisos Requeridos

Para los endpoints de gestión de productos, se requieren los siguientes permisos:

  • Para operaciones de lectura: supplier/product.read
  • Para operaciones de escritura: supplier/product.write
  • Para operaciones masivas: supplier/product.bulkwrite

Manejo de Errores

  1. Validación de Entrada

    • Validar todos los campos requeridos
    • Verificar tipos y formatos de datos
    • Verificar especificaciones de imagen
    • Validar códigos internos
  2. Respuestas de Error

    • Usar códigos de estado HTTP apropiados
    • Proporcionar mensajes de error detallados
    • Incluir errores a nivel de campo
    • Agregar códigos de seguimiento de error
  3. Procedimientos de Recuperación

    • Manejar fallos de red
    • Implementar lógica de reintentos
    • Mantener consistencia de datos
    • Registrar detalles de error
  4. Monitoreo

    • Rastrear tasas de error
    • Monitorear rendimiento de API
    • Alertar sobre errores críticos
    • Analizar patrones de error