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
InternalIdintSiempre debe enviarse en 0
CodestringCódigo principal del producto (identificador clave)
StockintStock disponible
PricedecimalPrecio de venta final
OfferPricedecimalPrecio de lista (tachado) para ofertas
TaxesdecimalPorcentaje de impuestos aplicables
ForSaleboolDisponibilidad para venta
PublishedboolEstado de publicación en el canal
IsItemboolSi es ítem simple (true) o variante
ParentItemIdintID del ítem padre (para variantes)
ParentItemCodestringCódigo del ítem padre
PriceListIdintID de la lista de precios
PriceListCodestringCódigo de lista de precios (usar si no se usa PriceListId)
PriceModeintModo de asignación de precios (siempre 0 o null)
DepStockstringCódigo del depósito asociado
PropertiesarrayPropiedades adicionales (Key/Value)
NamestringNombre del producto
Code2stringCódigo alternativo
ExternalReferencestringReferencia externa (ID en ERP)
SiteIdintIdentificador del sitio de publicación
ExtendedWarrantyarrayLista 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