> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fire.rest/llms.txt
> Use this file to discover all available pages before exploring further.

# product.updated

> Se emite cuando uno o más productos cambian. Aplica a todos los menús y tiendas donde aparecen los productos afectados.

`product.updated` es un evento **incremental**. Los productos del payload se crean o actualizan en cada sistema externo destino — los productos existentes que no estén incluidos en el payload quedan sin modificar. Para eliminar un producto, envía un evento [`menu.updated`](/es/webhook-reference/menu-updated-v2) con el menú completo excluyendo ese producto.

Cuando un cambio de producto afecta a múltiples tiendas, Fire emite un **único evento** con todas las tiendas afectadas listadas en `targets`. Tu sistema itera los targets y aplica los mismos datos de producto a cada uno.

## Payload

```json theme={null}
{
  "event": {
    "id": "evt_ghi789",
    "type": "product.updated",
    "executionId": "exec_ghi123",
    "createdAt": "2025-01-15T14:32:00.000Z",
    "timezone": "America/Sao_Paulo"
  },
  "data": {
    "account": "1",
    "country": "BR",
    "groupId": "a3f7c2d1-84be-4e10-9b3a-2c5d6e7f8091",
    "targets": [
      {
        "storeId": "b3d2a1f0-6e21-4c3a-9f5d-7a8b9c0d1e2f",
        "storeName": "Laboratorio Brasil",
        "vendorId": "100.6.1350",
        "timezone": "America/Sao_Paulo",
        "channels": [
          {
            "channelId": "d5f4c3b2-8043-4e5c-9b7f-9c0d1e2f3a4b",
            "channelReferenceName": "iFood",
            "listName": "Menu App"
          }
        ]
      },
      {
        "storeId": "c4e3b2a1-7f32-4d4b-8a6e-8b9c0d1e2f3a",
        "storeName": "Vila Olimpia",
        "vendorId": "100.6.1351",
        "timezone": "America/Sao_Paulo",
        "channels": [
          {
            "channelId": "d5f4c3b2-8043-4e5c-9b7f-9c0d1e2f3a4b",
            "channelReferenceName": "iFood",
            "listName": "Menu App"
          }
        ]
      }
    ],
    "products": [
      {
        "productId": "prod_001",
        "name": "Hamburguesa Clásica",
        "description": "Medallón de res, lechuga, tomate, pepinillos",
        "standardTime": true,
        "featured": false,
        "active": true,
        "type": "PRODUCTO",
        "priceInfo": {
          "pointPrice": 0,
          "price": 1000,
          "referencePrice": 1200,
          "suggestedPrice": 1200
        },
        "taxInfo": [
          { "vatRatePercentage": 12 }
        ],
        "productModifiers": [
          {
            "modifierId": "mod_001",
            "position": 1
          }
        ],
        "schedules": [
          {
            "day": "FRIDAY",
            "startDate": "2025-01-01",
            "endDate": "2025-12-31",
            "startTime": "10:00",
            "endTime": "22:30"
          }
        ],
        "images": [
          {
            "imageCategoryId": "img_prod_001",
            "fileUrl": "https://cdn.example.com/products/classic-burger.jpg"
          }
        ],
        "upselling": ["prod_002"],
        "crossSelling": ["prod_003"],
        "tags": ["bestseller"],
        "additionalInfo": {
          "assignedAt": "2025-01-10T09:15:00Z"
        }
      },
      {
        "productId": "prod_size_small",
        "name": "Pequeño",
        "description": "Tamaño pequeño",
        "standardTime": true,
        "featured": false,
        "active": true,
        "type": "MODIFIER",
        "priceInfo": {
          "pointPrice": 0,
          "price": 0,
          "referencePrice": 0,
          "suggestedPrice": 0
        },
        "taxInfo": [],
        "productModifiers": [],
        "schedules": [],
        "images": [],
        "upselling": [],
        "crossSelling": [],
        "tags": [],
        "additionalInfo": {}
      }
    ],
    "modifierGroups": [
      {
        "modifierId": "mod_001",
        "modifier": "Elige tu tamaño",
        "minOptions": 1,
        "maxOptions": 1,
        "type": "RADIO",
        "modifierOptions": [
          {
            "optionId": "opt_001",
            "productId": "prod_size_small",
            "name": "Pequeño",
            "position": 1
          }
        ]
      }
    ],
    "categories": [
      {
        "productCategoryId": "cat_001",
        "name": "Hamburguesas",
        "displayInList": true,
        "featured": false,
        "position": 1,
        "images": [],
        "assignedAt": "2025-01-10T09:15:00Z",
        "productListing": [
          {
            "productId": "prod_001",
            "position": 1
          }
        ],
        "schedules": []
      }
    ]
  }
}
```

## Campos

### `data`

| Campo            | Tipo      | Descripción                                                                                   |
| ---------------- | --------- | --------------------------------------------------------------------------------------------- |
| `account`        | string    | Identificador de la cuenta — requerido por sistemas externos                                  |
| `country`        | string    | Código de país ISO 3166-1 alpha-2 (p. ej. `EC`, `BR`, `CO`) — requerido por sistemas externos |
| `groupId`        | string    | UUID que correlaciona eventos del mismo batch de publicación o sincronización                 |
| `targets`        | object\[] | Tiendas donde los productos deben actualizarse                                                |
| `products`       | object\[] | Productos a crear o actualizar                                                                |
| `modifierGroups` | object\[] | Grupos de modificadores referenciados por los productos                                       |
| `categories`     | object\[] | Categorías afectadas por los cambios de producto                                              |

### `data.targets[n]`

| Campo       | Tipo      | Descripción                                                          |
| ----------- | --------- | -------------------------------------------------------------------- |
| `storeId`   | string    | UUID interno de la tienda (PK `stores.id`) — no es el `store_number` |
| `storeName` | string    | Nombre operativo de la tienda                                        |
| `vendorId`  | string    | Identificador de marca de la tienda                                  |
| `timezone`  | string    | Zona horaria IANA de la tienda (p. ej. `America/Sao_Paulo`)          |
| `channels`  | object\[] | Canales de venta donde los productos deben actualizarse              |

### `data.targets[n].channels[n]`

| Campo                  | Tipo   | Descripción                                                                                       |
| ---------------------- | ------ | ------------------------------------------------------------------------------------------------- |
| `channelId`            | string | UUID interno del canal de ventas (PK `channels.id`) — no es el `channel_id` externo del agregador |
| `channelReferenceName` | string | Nombre del canal de ventas (p. ej. `iFood`, `Rappi`) — no del fulfillment                         |
| `listName`             | string | Nombre del menú en esa tienda/canal                                                               |

### `data.products[n]`

| Campo                       | Tipo           | Descripción                                                                                                                                                                                                                                                                                                                                                                                    |
| --------------------------- | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `productId`                 | string         | Identificador del producto                                                                                                                                                                                                                                                                                                                                                                     |
| `name`                      | string         | Nombre del producto                                                                                                                                                                                                                                                                                                                                                                            |
| `description`               | string         | Descripción del producto                                                                                                                                                                                                                                                                                                                                                                       |
| `standardTime`              | boolean        | Si aplica el tiempo de preparación estándar                                                                                                                                                                                                                                                                                                                                                    |
| `featured`                  | boolean        | Si el producto está destacado                                                                                                                                                                                                                                                                                                                                                                  |
| `active`                    | boolean        | Visibilidad en el menú; no refleja stock ni disponibilidad operativa (eso viaja en [`product.availability_changed`](/es/webhook-reference/product-availability-changed))                                                                                                                                                                                                                       |
| `type`                      | string         | Tipo de ítem: `PRODUCTO`, `MODIFIER`, `COMPLEMENT` o `COMBO`                                                                                                                                                                                                                                                                                                                                   |
| `priceInfo`                 | object         | Precios resueltos del producto                                                                                                                                                                                                                                                                                                                                                                 |
| `priceInfo.pointPrice`      | number         | Precio en puntos                                                                                                                                                                                                                                                                                                                                                                               |
| `priceInfo.price`           | number         | Precio resuelto (`0` para combos)                                                                                                                                                                                                                                                                                                                                                              |
| `priceInfo.referencePrice`  | number         | Precio de referencia cuando aplica en catálogo — para `COMBO` es el valor real                                                                                                                                                                                                                                                                                                                 |
| `priceInfo.suggestedPrice`  | number         | Precio sugerido cuando aplica en catálogo                                                                                                                                                                                                                                                                                                                                                      |
| `taxInfo`                   | object\[]      | Información fiscal — `{ vatRatePercentage }`                                                                                                                                                                                                                                                                                                                                                   |
| `productModifiers`          | object\[]      | Referencias de grupos de modificadores — `{ modifierId, position, overrides? }`. La `position` es **por producto** (el mismo grupo puede ir en otra posición en otro producto), y `overrides[]` lleva el precio de la opción **para este producto en este menú**. Misma estructura que en [`menu.updated`](/es/webhook-reference/menu-updated-v2#datamenuproductsnproductmodifiersnoverridesn) |
| `schedules`                 | object\[]      | Disponibilidad por horario                                                                                                                                                                                                                                                                                                                                                                     |
| `images`                    | object\[]      | Imágenes del producto                                                                                                                                                                                                                                                                                                                                                                          |
| `upselling`                 | string\[]      | IDs de productos sugeridos como upsell                                                                                                                                                                                                                                                                                                                                                         |
| `crossSelling`              | string\[]      | IDs de productos sugeridos como cross-sell                                                                                                                                                                                                                                                                                                                                                     |
| `tags`                      | string\[]      | Etiquetas del producto                                                                                                                                                                                                                                                                                                                                                                         |
| `additionalInfo`            | object         | Metadata adicional                                                                                                                                                                                                                                                                                                                                                                             |
| `additionalInfo.assignedAt` | string \| null | Fecha en que el producto entró al menú, en ISO 8601 UTC. Ver [Fecha de incorporación al menú](#fecha-de-incorporación-al-menú)                                                                                                                                                                                                                                                                 |

### `data.modifierGroups[n]`

Misma estructura que en [`menu.updated`](/es/webhook-reference/menu-updated-v2#datamenumodifiergroupsn).

### `data.categories[n]`

Misma estructura que en [`menu.updated`](/es/webhook-reference/menu-updated-v2#datamenucategoriesn), incluido `assignedAt` — la fecha en que la **categoría** entró al menú, con la misma semántica que la del producto.

## Fecha de incorporación al menú

`additionalInfo.assignedAt` (producto) y `categories[n].assignedAt` (categoría) indican cuándo la entidad entró al menú — dato de **membresía**, no de edición. Semántica completa, formato y casos borde en [`menu.updated` → Fecha de incorporación al menú](/es/webhook-reference/menu-updated-v2#fecha-de-incorporación-al-menú), referencia canónica del campo.

**No** viaja en [`product.price_updated`](/es/webhook-reference/product-price-updated) ni en [`product.availability_changed`](/es/webhook-reference/product-availability-changed): esos eventos transmiten solo su delta.

## Comportamiento incremental

| Situación                                             | Resultado   |
| ----------------------------------------------------- | ----------- |
| Producto en payload, existe en sistema externo        | Actualizado |
| Producto en payload, no existe en sistema externo     | Creado      |
| Producto **no** en payload, existe en sistema externo | Sin cambios |

`product.updated` nunca borra productos — no existe una forma de expresar "eliminar" dentro de este evento. Para eliminar un producto hay que usar [`menu.updated`](/es/webhook-reference/menu-updated-v2) enviando el menú completo sin ese producto.

## Uso

Consulta la guía [Publicación de producto](/es/guides/product-publication) para el flujo completo de procesamiento.
