---
title: "Update product"
method: PUT
path: "/ecommerce/products/{productId}"
---

# Update product

`PUT /ecommerce/products/{productId}`

## Request

- Base URL: `https://api.service.getjusto.com/v3`
- URL: `https://api.service.getjusto.com/v3/ecommerce/products/{productId}`
- Auth: none declared

Requiere autorización admin de la marca y edición de productos habilitada. Actualiza sólo los campos enviados, sanitiza el HTML e invalida las cachés de publicación. Devuelve el producto guardado. En MCP, confirma los cambios con el usuario antes de ejecutar update_api_call.

## Path parameters

- `productId` string, required

## Request body

- ApiProductUpdateInput: Campos editables. Omitir un campo conserva su valor. No acepta cambios de productId, URL, imágenes de galería ni precios por este endpoint.
  - `internalName` string: Nombre interno del producto.
  - `categoriesIds` string[]: IDs de categorías asociadas.
  - `modifiersIds` string[]: IDs de modificadores asociados.
  - `externalId` string: ID externo configurado por la marca.
  - `metadata` object: Metadata del item escrita por API v3.
  - `name` string: Nombre del producto. No puede quedar vacío.
  - `description` string, nullable: Descripción visible del producto.
  - `nicknames` string[]: Nombres alternativos para buscar el producto.
  - `informativeStamps` string[]: Sellos informativos admitidos por el catálogo.
  - `tabsItemsCount` number: Cantidad de items usada por POS.
  - `taxes` object, nullable: Configuración de impuestos del producto por país (cl, co, mx, pe).
  - `seoTitle` string, nullable: Título SEO independiente del nombre. Null o texto vacío restaura el título automático.
  - `seoDescription` string, nullable: Metadescripción independiente de la descripción. Null o texto vacío restaura el valor automático.
  - `seoImageURL` string, nullable: URL absoluta http o https sin credenciales, para SEO y enlaces compartidos. Null o texto vacío restaura la imagen automática. No modifica la galería.
  - `richContent` string, nullable: HTML sanitizado, disponible en GET individual y respuesta de PUT. Null elimina el contenido. Admite texto, imágenes, galerías, tablas y acordiones; elimina scripts, estilos y clases.
  - `richContentPosition` 'beforeModifiers' | 'afterModifiers' | 'null', nullable: Posición del contenido respecto a los modificadores. Null usa beforeModifiers.

## Response `200`

The OpenAPI spec

- object
  - `success` boolean
  - `data` ApiListingProduct: Producto del catálogo.
    - `productId` string: ID Justo del producto.
    - `importId` string: ID de importación del producto.
    - `name` string: Nombre del producto.
    - `internalName` string: Nombre interno del producto.
    - `description` string: Descripción visible del producto.
    - `seoTitle` string, nullable: Título SEO independiente del nombre. Null o texto vacío restaura el título automático.
    - `seoDescription` string, nullable: Metadescripción independiente de la descripción. Null o texto vacío restaura el valor automático.
    - `seoImageURL` string, nullable: URL absoluta http o https sin credenciales, para SEO y enlaces compartidos. Null o texto vacío restaura la imagen automática. No modifica la galería.
    - `richContent` string, nullable: HTML sanitizado, disponible en GET individual y respuesta de PUT. Null elimina el contenido. Admite texto, imágenes, galerías, tablas y acordiones; elimina scripts, estilos y clases.
    - `richContentPosition` 'beforeModifiers' | 'afterModifiers' | 'null', nullable: Posición del contenido respecto a los modificadores. Null usa beforeModifiers.
    - `hasRichContent` boolean: Indica si tiene contenido enriquecido. El listado omite el HTML; consulta el detalle para obtenerlo.
    - `url` string: URL pública del producto.
    - `partialUrl` string: Path público del producto.
    - `categoriesNames` string[]: Nombres de categorías asociadas.
    - `categoriesIds` string[]: IDs de categorías asociadas.
    - `modifiersIds` string[]: IDs de modificadores asociados.
    - `externalId` string: ID externo configurado por la marca.
    - `metadata` object: Metadata del item escrita por API v3.
    - `images` string[]: URLs de imágenes del producto.
    - `menus` object[]: Precio y disponibilidad en cada menú. El cliente ve sólo los del menú que aplica en su pedido; ver GET /ecommerce/prices.
      - `menuId` string: ID Justo del menú (_id en GET /ecommerce/prices).
      - `price` number: Precio base en este menú. Si el item no tiene configuración en este menú, es 0 y available no viene.
      - `discount` number, nullable: Precio con descuento: el precio final rebajado, no un monto ni un porcentaje. null si no tiene. Si en el administrador se guardaron varios descuentos seguidos, es el primero, pero el cliente paga el último.
      - `available` boolean: true si se vende en este menú. Si es false o no viene, no se vende: el item no aparece mientras se use este menú, salvo que tenga un mensaje de no disponible en el administrador; entonces aparece con ese mensaje, pero no se puede comprar.
      - `externalId` string: ID externo del producto en este menú: el de reemplazo si se configuró; si no, el externalId del producto.

## Other responses

- `400`: Errors

## Changes

- **2026-10-31** `4ad06bd631ce`: 2 breaking, 10 warning, 16 info
  - the `name` request property's minLength was increased from `0` to `1`
  - the response property `data/menus/items/discount` became nullable for the status `200`
  - removed the request property `categoriesNames`
  - removed the request property `images`
  - …24 more
- **2026-07-22** `d9d38def2cf6`: 1 info
  - endpoint added
- **2026-06-01** `6788b092513b`: 1 breaking
  - api path removed without deprecation
- **2026-05-18** `39f0eb0b2640`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/getjusto/apis/justo-api/changes/ecommerce/products/:productId/put.md)

---

[API](https://skmtc.dev/getjusto/apis/justo-api.md) - [All operations](https://skmtc.dev/getjusto/apis/justo-api/llms.txt) - [OpenAPI document](https://skmtc.dev/getjusto/apis/justo-api/revisions/c810bd8246fd?raw)
