Descripción
Este método permite definir o actualizar el inventario de productos y modificadores en un establecimiento específico. Es posible modificar el inventario de un único producto o modificador, o realizar múltiples actualizaciones en una sola solicitud.
Modificar stock de un producto/modificador
Para manejar el stock de un producto o modificador, se hace mediante el método setOutOfStockItem
.
Este método tiene como finalidad definir, de manera unitaria o múltiple, el stock de productos o modificadores.
Ejemplo para definir stock de un producto
El siguiente request define con stock = 9
al producto con ID r5RZaWcBzzWz3WAnp
.
curl --location --request PATCH 'https: //api.getjusto.com/api/v2/products/itemsStock' \
--header 'Authorization: Bearer <API TOKEN>' \
--header 'Content-Type: application/json' \
--data-raw'{
"storeId" : "<STORE ID>" ,
"productId" : "r5RZaWcBzzWz3WAnp" ,
"type" : "product" ,
"stock" : 9
}'
Ejemplo para definir stock de dos productos simultáneamente.
El siguiente request define con stock = 9
al producto con ID r5RZaWcBzzWz3WAnp
y con stock = 45
al producto con ID h67Hkjhusdf54JnaK
.
curl --location --request PATCH 'https: //api.getjusto.com/api/v2/products/itemsStock' \
--header 'Authorization: Bearer <API TOKEN>' \
--header 'Content-Type: application/json' \
--data-raw'[{
"storeId" : "<STORE ID>" ,
"productId" : "r5RZaWcBzzWz3WAnp" ,
"type" : "product" ,
"stock" : 9
},
{
"storeId" : "<STORE ID>" ,
"productId" : "h67Hkjhusdf54JnaK" ,
"type" : "product" ,
"stock" : 45
}]'
Ejemplo para definir stock de la opción de un modificador
El siguiente request define con stock = 23
a la opción con ID PG68HFqD7rGz6XGBe
del modificador con ID gSnnm7XEWqKbNqNKd
.
curl --location --request PATCH 'https: //api.getjusto.com/api/v2/products/itemsStock' \
--header 'Authorization: Bearer <API TOKEN>' \
--header 'Content-Type: application/json' \
--data-raw '{
"type" : "modifier" ,
"storeId" : "Li4eEa3W2hiuGGCFa" ,
"modifierId" : "gSnnm7XEWqKbNqNKd" ,
"modifierOptionId" : "PG68HFqD7rGz6XGBe" ,
"untilDate" : "2021-08-09T15:15:00.052Z" ,
"stock" : 23
}'
Ejemplo para definir stock de la opción de dos modificadores simultáneamente
El siguiente request define con stock = 23
a la opción con ID PG68HFqD7rGz6XGBe
del modificador con ID gSnnm7XEWqKbNqNKd
y define con stock = 50
a la opción con ID Jhjk987lJklnAdxf9
del modificador con ID pqMan54HyrC537Nn
.
curl --location --request PATCH 'https: //api.getjusto.com/api/v2/products/itemsStock' \
--header 'Authorization: Bearer <API TOKEN>' \
--header 'Content-Type: application/json' \
--data-raw '[{
"type" : "modifier" ,
"storeId" : "Li4eEa3W2hiuGGCFa" ,
"modifierId" : "gSnnm7XEWqKbNqNKd" ,
"modifierOptionId" : "PG68HFqD7rGz6XGBe" ,
"stock" : 23
},
{
"type" : "modifier" ,
"storeId" : "Li4eEa3W2hiuGGCFa" ,
"modifierId" : "Jhjk987lJklnAdxf9" ,
"modifierOptionId" : "pqMan54HyrC537Nnm" ,
"untilDate" : "2021-08-09T15:15:00.052Z" ,
"stock" : 23
}]'
Ejemplo para definir stock de la opción de productos y modificadores simultáneamente
curl --location --request PATCH 'https: //api.getjusto.com/api/v2/products/itemsStock' \
--header 'Authorization: Bearer <API TOKEN>' \
--header 'Content-Type: application/json' \
--data-raw '[{
"type" : "modifier" ,
"storeId" : "Li4eEa3W2hiuGGCFa" ,
"modifierId" : "gSnnm7XEWqKbNqNKd" ,
"modifierOptionId" : "PG68HFqD7rGz6XGBe" ,
"stock" : 2
},
{
"storeId" : "<STORE ID>" ,
"productId" : "h67Hkjhusdf54JnaK" ,
"type" : "product" ,
"stock" : 10
},
{
"type" : "modifier" ,
"storeId" : "Li4eEa3W2hiuGGCFa" ,
"modifierId" : "Jhjk987lJklnAdxf9" ,
"modifierOptionId" : "pqMan54HyrC537Nnm" ,
"untilDate" : "2021-08-09T15:15:00.052Z" ,
"stock" : 4
},
{
"storeId" : "<STORE ID>" ,
"productId" : "r5RZaWcBzzWz3WAnp" ,
"type" : "product" ,
"stock" : 35
}]'
Consideraciones importantes
Cuando se realizan modificaciones de stock múltiples, el body del request debe ser un arreglo que contenga los productos y/o modificadores que se quieran configurar.
Es importante recordar que se pueden utilizar los ids externos (externalId
) tanto de los locales (stores), productos, modificadores u opciones de modificadores como alternativas a los ids internos de Justo.
Cuando en un body se repite la información de un ítem (productos o modificadores), se toma el valor del primer ítem encontrado.
Cada vez que se ingrese una nueva orden que incorpore alguno de los stocks definidos, se descontará del stock hasta que quede el contador en 0. Cuando eso ocurra, se mostrará el stock de ese producto como agotado.
Para dejar de que un producto o modificador dependa de un stock y aparezca siempre disponible, se debe hacer un request a deleteOutOfStockItem con el ID del stock.
Respuestas
Respuesta a solicitud sin errores
Response:
Parámetros:
status
: Indicador de la solicitud con el valor ok
.
data
: Arreglo de Object que contiene el resumen de la información solicitada y los ids de elementos guardados o modificados.
{
"status" : "ok" ,
"data" : [
{
"_id" : "LP4Aud472h7LHcAXW" ,
"store" : {
"_id" : "xKoiiqdtKGaRA2ve4" ,
"name" : "Example Store" ,
"externalId" : null
},
"modifier" : {
"_id" : "3sN33saCKhr7juwJk" ,
"externalId" : "modifier_external_id" ,
"name" : "Modifier Name"
},
"modifierOption" : {
"_id" : "RNbsQKhNx5LxJahqG" ,
"name" : "Modifier Option Name" ,
"externalId" : "modifier_option_external_id"
},
"type" : "modifier" ,
"websiteId" : "ErCkmcyCEovseJq5E" ,
"createdAt" : "2022-05-26T13:20:25.411Z" ,
"stock" : 1
},
{
"_id" : "xSFBykdrXEAz5GBWe" ,
"product" : {
"_id" : "r5RZaWcBzzWz3WAnp" ,
"name" : "Product Name" ,
"externalId" : null
},
"store" : {
"_id" : "xKoiiqdtKGaRA2ve4" ,
"name" : "Example Store" ,
"externalId" : null
},
"modifier" : null ,
"modifierOption" : null ,
"type" : "product" ,
"websiteId" : "ErCkmcyCEovseJq5E" ,
"createdAt" : "2022-05-26T13:20:25.409Z" ,
"stock" : 6
},
{
"_id" : "ymwNd9uf9bDWPPYGD" ,
"product" : {
"_id" : "r5RZaWcBzzWz3WAnp" ,
"name" : "Product Name" ,
"externalId" : null
},
"store" : {
"_id" : "xKoiiqdtKGaRA2ve4" ,
"name" : "Example Store" ,
"externalId" : null
},
"modifier" : null ,
"modifierOption" : null ,
"type" : "product" ,
"websiteId" : "ErCkmcyCEovseJq5E" ,
"createdAt" : "2022-05-26T13:20:25.410Z" ,
"stock" : 6
}
]
}
Respuesta a solicitud con errores parciales
Siempre se intentará procesar todos aquellos ítems que no contengan errores, por lo tanto, si en el cuerpo del mensaje se incluyen ítems con datos no existentes en la base de datos, o sin campos requeridos, se modificarán todos los ítems sin errores.
La respuesta en tales casos mostrará un resumen de todos los ítems procesados y un resumen de todos los errores encontrados.
Response:
status_code: 207 Multi-Status
.
Parámetros:
status
: Indicador de la solicitud con el valor "Multi-Status"
.
data
:
processedData
: Arreglo de Object
que contiene el resumen de la información solicitada y los ids de elementos guardados o modificados.
errors
: Arreglo de Object que contiene el resumen de los errores encontrados.
Ejemplo
{
"status" : "Multi-Status" ,
"data" : {
"processedData" : [
{
"_id" : "yFqs24Y9Z8fmdRJsr" ,
"store" : {
"_id" : "xKoiiqdtKGaRA2ve4" ,
"name" : "Store name" ,
"externalId" : null
},
"modifier" : null ,
"modifierOption" : {
"_id" : "RNbsQKhNx5LxJahqG" ,
"name" : "modifier option name" ,
"externalId" : "modifier_option_external_id"
},
"type" : "modifier" ,
"websiteId" : "ErCkmcyCEovseJq5E" ,
"createdAt" : "2022-05-26T19:28:57.436Z" ,
"stock" : 1
},
{
"_id" : "JGFjp2T5d24NhtB7B" ,
"product" : {
"_id" : "r5RZaWcBzzWz3WAnp" ,
"name" : "product name" ,
"externalId" : null
},
"store" : {
"_id" : "xKoiiqdtKGaRA2ve4" ,
"name" : "Store name" ,
"externalId" : null
},
"modifier" : null ,
"modifierOption" : null ,
"type" : "product" ,
"websiteId" : "ErCkmcyCEovseJq5E" ,
"createdAt" : "2022-05-26T19:28:57.437Z" ,
"stock" : 6
}
],
"errors" : [
{
"item" : {
"storeId" : "xKoiiqdtKGaRA2ve4" ,
"type" : "modifier" ,
"stock" : 88
},
"errors" : [
"Missing parameter 'modifierId' or 'modifierOptionId'"
]
},
{
"item" : {
"storeId" : "non_existant_id" ,
"modifierId" : "DyozZ7bmqB64YQTmQ" ,
"modifierOptionId" : "v44wppcCP3QAFopMA" ,
"type" : "modifier" ,
"stock" : 70
},
"errors" : [
"Store not found [storeId:non_existant_id]"
]
}
]
}
}
Respuesta a solicitud sin errores
En caso de que no pueda procesarse ninguno de los ítems del cuerpo del mensaje, se responde la petición con un error.
La respuesta en tales casos mostrará un resumen de todos los errores encontrados.
Response:
status_code: 400 Bad Request
.
Parámetros:
status
: Indicador de la solicitud con el valor "error"
.
error
: Indicador de la razón del error es: "Validations errors"
.
data
:
errors
: Arreglo de Object
que contiene el resumen de los errores encontrados.
Ejemplo
{
"status" : "error" ,
"error" : "Validations errors" ,
"data" : {
"errors" : [
{
"item" : {
"storeId" : "xKoiiqdtKGaRA2ve4" ,
"modifierId-" : "3sN33saCKhr7juwJk" ,
"modifierOptionId" : "RNbsQKhNx5LxJahqG" ,
"type" : "bad_type" ,
"stock" : 1
},
"errors" : [
"The parameter 'type' must be 'product' or 'modifier'"
]
},
{
"item" : {
"storeId" : "xKoiiqdtKGaRA2ve4" ,
"productId" : "r5RZaWcBzzWz3WAnp" ,
"type" : "product" ,
},
"errors" : [
"Missing parameter 'stock'"
]
},
{
"item" : {
"storeId" : "xKoiiqdtKGaRA2ve4" ,
"modifierId-" : "3sN33saCKhr7juwJk" ,
"modifierOptionId" : "non_existant_id" ,
"type" : "modifier" ,
"stock" : 1
},
"errors" : [
"Modifier option not found [modifierOptionId:non_existant_id]"
]
}
]
}
}
Body application/json · (Product Stock · object | Modifier Stock · object)[]
Product Stock Modifier Stock
The response is of type object
.