Saltar al contenido principal

Actualización de Inventario

La API de E3 Stores permite actualizar información de inventario y atributos comerciales de productos para mantener sincronizada la información entre sistemas como ERP y eCommerce.

Características del endpoint​

Este endpoint permite actualizar únicamente los campos enviados, manteniendo sin cambios el resto de la información del producto. Se utiliza el código del producto como identificador único para la actualización.

Endpoint de actualización​

URL y método​

PUT /api/Inventory?hash={hash}&mode={mode}

Parámetros requeridos​

ParámetroTipoDescripciónEjemplo
hashstringToken de autenticación válido5de3928b-6018-4b0c-9ebd-bc2c3e18f708
modestringModo de operación (siempre "default")default

Ejemplo de petición - Actualizar precio​

curl -X PUT \
"https://demo.e3stores.cloud/api/Inventory?hash=5de3928b-6018-4b0c-9ebd-bc2c3e18f708&mode=default" \
-H "Content-Type: application/json" \
-d '{
"InternalId": 0,
"Code": "ABC123",
"Price": 120.0
}'

Ejemplo de petición - Actualizar stock​

curl -X PUT \
"https://demo.e3stores.cloud/api/Inventory?hash=5de3928b-6018-4b0c-9ebd-bc2c3e18f708&mode=default" \
-H "Content-Type: application/json" \
-d '{
"InternalId": 0,
"Code": "ABC123",
"Stock": 15
}'

Ejemplo de respuesta exitosa​

{
"Success": true,
"Message": "Producto actualizado correctamente."
}

Estructura del payload​

El payload debe incluir siempre InternalId en 0 y Code como identificador. Los demás campos son opcionales y solo se actualizarán si se envían.

Payload completo de ejemplo​

{
"InternalId": 0,
"Code": "ABC123",
"Stock": 10,
"Price": 100.0,
"OfferPrice": 90.0,
"Taxes": 21.0,
"ForSale": true,
"Published": true,
"IsItem": true,
"ParentItemId": null,
"ParentItemCode": null,
"PriceListId": 1,
"PriceListCode": "LISTA-1",
"PriceMode": 1,
"PrecioOriginal": "120.00",
"DepStock": "DEP01",
"Properties": [
{
"Key": "Color",
"Value": "Negro"
}
],
"Name": "Producto de Ejemplo",
"Code2": "ALT123",
"ExternalReference": "EXT456",
"SiteId": 2,
"ExtendedWarranty": [
{
"Name": "Garantía Extendida 12M",
"Price": 15.0,
"Active": true,
"Cant": 1,
"Code": "GW12"
}
]
}

Referencia de campos​

CampoTipoRequeridoDescripción
InternalIdint✅Siempre debe enviarse en 0
Codestring✅Código principal del producto (identificador clave)
Stockint❌Stock disponible
Pricedecimal❌Precio de venta final
OfferPricedecimal❌Precio de lista (tachado) para ofertas
Taxesdecimal❌Porcentaje de impuestos aplicables
ForSalebool❌Disponibilidad para venta
Publishedbool❌Estado de publicación en el canal
IsItembool❌Si es ítem simple (true) o variante
ParentItemIdint❌ID del ítem padre (para variantes)
ParentItemCodestring❌Código del ítem padre
PriceListIdint❌ID de la lista de precios
PriceListCodestring❌Código de lista de precios (usar si no se usa PriceListId)
PriceModeint❌Modo de asignación de precios (siempre 0 o null)
DepStockstring❌Código del depósito asociado
Propertiesarray❌Propiedades adicionales (Key/Value)
Namestring❌Nombre del producto
Code2string❌Código alternativo
ExternalReferencestring❌Referencia externa (ID en ERP)
SiteIdint❌Identificador del sitio de publicación
ExtendedWarrantyarray❌Lista de garantías extendidas

Manejo de errores​

Códigos de error comunes​

CódigoDescripción
400Payload inválido o falta el campo Code
401Token (hash) inválido o expirado
500Error interno del servidor

Consideraciones importantes​

Precios e impuestos​

  • Por defecto, el campo Price debe incluir impuestos (precio final al consumidor)
  • El campo Taxes representa el porcentaje de impuestos (ejemplo: 21.0 = 21% IVA)
  • Esta configuración puede modificarse en el backend para trabajar con precios netos

Actualización parcial​

  • Solo se requieren los campos InternalId (siempre 0) y Code
  • Los campos opcionales que no se envíen permanecerán sin cambios
  • Esto permite actualizaciones eficientes enviando solo los datos que cambian

Garantías extendidas y propiedades​

  • El uso de garantías extendidas y propiedades depende de la configuración del canal de venta
  • Las propiedades se definen como pares Key/Value para atributos personalizados

Todos los endpoints de Inventory disponibles​

Endpoints de consulta (GET)​

EndpointDescripciónParámetros principales
GET api/Inventory/Get?hash={hash}&code={code}&pricelistId={pricelistId}&siteId={siteId}&includePreferences={includePreferences}Método de consulta con preferenciashash, code, pricelistId, siteId, includePreferences

Endpoints de modificación (POST/PUT)​

EndpointDescripciónParámetros principales
PUT api/Inventory?hash={hash}&mode={mode}Actualiza producto existentehash, mode + payload JSON

Referencia completa de parámetros​

Parámetros de URL comunes​

ParámetroTipoDescripciónEjemploUso
hashstringRequerido - Token de autenticación5de3928b-6018-4b0c-9ebd-bc2c3e18f708Todos los endpoints
codestringCódigo del producto a consultarABC123Consultas específicas
idintID interno del producto12345Consultas por ID
itemIdintID del ítem específico67890Operaciones por ítem
siteIdintID del sitio/tienda2Filtrar por sitio
pricelistIdintID de la lista de precios1Filtrar por lista de precios
includePreferencesboolIncluir preferencias del usuariotrue/falseConsultas con preferencias
modestringModo de operación (siempre "default")defaultActualizaciones

Parámetros del payload JSON (todos opcionales excepto InternalId y Code)​

CampoTipoDescripción detalladaValores posibles
InternalIdintRequerido - Identificador interno (siempre 0)0
CodestringRequerido - Código único del productoABC123
StockintCantidad disponible en inventario0 a 999999
PricedecimalPrecio final de venta (incluye impuestos por defecto)0.01 a 999999.99
OfferPricedecimalPrecio de oferta/promocional (se muestra tachado)0.01 a 999999.99
TaxesdecimalPorcentaje de impuestos aplicables0.00 a 100.00
ForSaleboolProducto disponible para ventatrue, false
PublishedboolProducto publicado en el sitiotrue, false
IsItemboolEs producto simple (true) o variante (false)true, false
ParentItemIdintID del producto padre (para variantes)null o ID numérico
ParentItemCodestringCódigo del producto padre (para variantes)null o código string
PriceListIdintID de la lista de precios asignada1, 2, 3, etc.
PriceListCodestringCódigo de la lista de precios (alternativa a PriceListId)LISTA-1, LISTA-VIP
PriceModeintModo de cálculo de precios (siempre 0 o null)0, null
PrecioOriginalstringPrecio original de referencia"120.00"
DepStockstringCódigo del depósito/almacénDEP01, ALMACEN-A
NamestringNombre descriptivo del producto"Producto de Ejemplo"
Code2stringCódigo alternativo del productoALT123
ExternalReferencestringReferencia en sistema externo (ERP)EXT456
SiteIdintID del sitio donde se publica1, 2, 3, etc.

Parámetros de objetos anidados​

Properties (Propiedades personalizadas)​

"Properties": [
{
"Key": "string", // Nombre de la propiedad
"Value": "string" // Valor de la propiedad
}
]

ExtendedWarranty (Garantías extendidas)​

"ExtendedWarranty": [
{
"Name": "string", // Nombre de la garantía
"Price": decimal, // Precio de la garantía
"Active": bool, // Estado activo
"Cant": int, // Cantidad disponible
"Code": "string" // Código de la garantía
}
]

Ejemplos de uso por endpoint​

Consultar todos los productos​

curl -X GET \
"https://demo.e3stores.cloud/api/Inventory/Get?hash=5de3928b-6018-4b0c-9ebd-bc2c3e18f708&siteId=2"

Consultar producto específico por código​

curl -X GET \
"https://demo.e3stores.cloud/api/Inventory/Get?hash=5de3928b-6018-4b0c-9ebd-bc2c3e18f708&code=ABC123&siteId=2"

Consultar con lista de precios específica​

curl -X GET \
"https://demo.e3stores.cloud/api/Inventory/Get?hash=5de3928b-6018-4b0c-9ebd-bc2c3e18f708&code=ABC123&pricelistId=1&siteId=2&includePreferences=true"

Consideraciones por tipo de endpoint​

Para consultas (GET)​

  • hash siempre requerido para autenticación
  • siteId recomendado para filtrar por tienda específica
  • includePreferences útil para obtener configuraciones personalizadas
  • code para búsquedas específicas, sin él devuelve todos los productos

Para actualizaciones (PUT)​

  • mode siempre debe ser "default"
  • Solo se actualizan los campos enviados en el payload
  • InternalId y Code siempre requeridos en el payload

Para creaciones (POST)​

  • Similar a PUT pero crea un nuevo registro
  • Code debe ser único en el sistema
  • Campos opcionales toman valores por defecto