POST
/
updateStock
curl --request POST \
  --url https://api.getjusto.com/api/v1/updateStock \
  --header 'Content-Type: application/json' \
  --data '[
  {
    "storeId": "<string>",
    "productId": "<string>",
    "type": "product",
    "stock": 1,
    "deleteItem": true
  }
]'
{
  "status": "<string>",
  "data": {
    "processId": "<string>"
  }
}

Descripción

Este método permite actualizar el stock de productos y modificadores en una tienda, ya sea de forma individual o múltiple. Puedes establecer una nueva cantidad de stock para un producto o modificador, o simplemente eliminar la restricción de stock para que siempre esté disponible.

El proceso de actualización se realiza de manera asíncrona, lo que significa que cuando envías la solicitud, la API te devuelve un processId, indicando que la actualización ha comenzado. Luego, a través de un webhook, recibirás notificaciones con el estado del proceso hasta que finalice.

Webhook

Este método de la API de Justo retorna una respuesta síncrona indicando los errores encontrados en el cuerpo del mensaje. O en caso de no encontrarse, retorna una respuesta indicando el ID del proceso que asíncronamente empezará a ejecutar. De esta forma, hace uso de un webhook para indicar el estado del proceso.

Como precondición, se debe configurar el webhook Actualización de estado de procesos.

Ejemplo para definir stock de un producto

El siguiente request define con stock = 9 al producto con ID r5RZaWcBzzWz3WAnp.

curl --location --request POST 'https://api.getjusto.com/api/v1/updateStock' \
     --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 POST 'https://api.getjusto.com/api/v1/updateStock' \
     --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 POST 'https://api.getjusto.com/api/v1/updateStock' \
     --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 pqMan54HyrC537Nnm.

curl --location --request POST 'https://api.getjusto.com/api/v1/updateStock' \
     --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 POST 'https://api.getjusto.com/api/v1/updateStock' \
     --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
     }]'

Ejemplo para definir stock de un producto y eliminar un productos agotado simultáneamente

curl --location --request POST 'https://api.getjusto.com/api/v1/updateStock' \
     --header 'Authorization: Bearer <API TOKEN>' \
     --header 'Content-Type: application/json' \
     --data-raw '[
     {
        "storeId": "<STORE ID>",
        "productId": "h67Hkjhusdf54JnaK",
        "type": "product",
        "stock": 10
     },
     {
        "storeId": "<STORE ID>",
        "productId": "r5RZaWcBzzWz3WAnp",
        "type": "product",
        "deleteItem": true
     }]'

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 incluir el parámetro deleteItem con el valor true.

Respuestas

El estatus de la respuesta es informada mediante webhook.

Respuesta a solicitud sin errores

Cuando la solicitud no tiene errores, la respuesta tiene la siguiente estructura:

  • Response: status_code: 200 OK.
  • Parámetros:
    • status: Indicador de la solicitud con el valor "ok".
    • data: Indica el id del proceso que inicia el el tratamiento del stock. Este id es el que se enviará en el webhook.
{
    "status": "ok",
    "data": {
        "processId": "p2rwWKqh49TxXszRz"
    }
}

##Respuestas del webhook

El webhook envía dos respuestas luego de la petición hacia la API de Justo.

1. Respuesta de proceso iniciado

Esta primera respuesta solo indica que se inicia el proceso de actualización de los datos. Se puede identificar por el processId: "p2rwWKqh49TxXszRz", el cual es el mismo indicado en la respuesta de la API. La identificación del estado se encuentra en el campo status: "RUNNING".

{
  "data": {
    "status": "RUNNING",
    "processId": "p2rwWKqh49TxXszRz",
    "processedItems": []
  },
  "date": "2023-01-18T19:20:26.415Z",
  "type": "processStatusUpdated"
}

2. Respuesta de proceso completado

Esta segunda respuesta indica que el proceso de actualización de los datos ha sido completado. Se puede identificar por el processId: "p2rwWKqh49TxXszRz", el cual es el mismo indicado en la respuesta de la API. La identificación del estado se encuentra en el campo status: "FINISHED".

El campo processedItems es un arreglo que contiene la lista de todos los cambios realizados.

{
  "data": {
    "status": "FINISHED",
    "processId": "p2rwWKqh49TxXszRz",
    "processedItems": [
      {
        "type": "product",
        "productId": "ZPbTsuJzRFSNvFoT7",
        "modifierId": null,
        "modifierOptionId": null,
        "productExternalId": "1007193",
        "modifierExternalId": null,
        "modifierOptionExternalId": null,
        "storeId": "dq3Ts2vq8a2bPMThm",
        "until": null,
        "untilDate": null,
        "websiteId": "EjKfjv3RYEXX9Puqa",
        "createdAt": "2023-01-18T19:20:22.857Z",
        "stock": 23,
        "_id": "x2kjojcpGkgcj8J9b"
      }
    ]
  },
  "date": "2023-01-18T19:20:26.520Z",
  "type": "processStatusUpdated"
}

Respuesta a solicitud con errores

En caso de encontrarse errores en el cuerpo del mensaje, ningún dato será procesado y ninguna información adicional será enviada mediante webhooks.

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.
{
    "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 · object[]

Response

200
application/json

Operacion exitosa

The response is of type object.