> ## 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

> Disparado quando um ou mais produtos são alterados. Aplica-se a todos os menus e lojas onde os produtos afetados aparecem.

`product.updated` é um evento **incremental**. Os produtos no payload são adicionados ou atualizados em cada sistema externo de destino — produtos existentes não incluídos no payload são mantidos sem alteração. Para remover um produto, envie um evento [`menu.updated`](/pt/webhook-reference/menu-updated-v2) com o menu completo excluindo esse produto.

Quando uma alteração de produto afeta várias lojas, o Fire emite um **único evento** com todas as lojas afetadas listadas em `targets`. Seu sistema itera os targets e aplica os mesmos dados de produto a cada um.

## 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": "X-Burguer Clássico",
        "description": "Hambúrguer bovino, alface, tomate, picles",
        "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": "Pequeno",
        "description": "Tamanho pequeno",
        "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": "Escolha o tamanho",
        "minOptions": 1,
        "maxOptions": 1,
        "type": "RADIO",
        "modifierOptions": [
          {
            "optionId": "opt_001",
            "productId": "prod_size_small",
            "name": "Pequeno",
            "position": 1
          }
        ]
      }
    ],
    "categories": [
      {
        "productCategoryId": "cat_001",
        "name": "Hambúrgueres",
        "displayInList": true,
        "featured": false,
        "position": 1,
        "images": [],
        "assignedAt": "2025-01-10T09:15:00Z",
        "productListing": [
          {
            "productId": "prod_001",
            "position": 1
          }
        ],
        "schedules": []
      }
    ]
  }
}
```

## Campos

### `data`

| Campo            | Tipo      | Descrição                                                                                     |
| ---------------- | --------- | --------------------------------------------------------------------------------------------- |
| `account`        | string    | Identificador da conta — necessário para sistemas externos                                    |
| `country`        | string    | Código do país ISO 3166-1 alpha-2 (ex.: `EC`, `BR`, `CO`) — necessário para sistemas externos |
| `groupId`        | string    | UUID que correlaciona eventos do mesmo batch de publicação ou sincronização                   |
| `targets`        | object\[] | Lojas onde os produtos devem ser atualizados                                                  |
| `products`       | object\[] | Produtos a criar ou atualizar                                                                 |
| `modifierGroups` | object\[] | Grupos de modificadores referenciados pelos produtos                                          |
| `categories`     | object\[] | Categorias afetadas pelas alterações de produto                                               |

### `data.targets[n]`

| Campo       | Tipo      | Descrição                                                      |
| ----------- | --------- | -------------------------------------------------------------- |
| `storeId`   | string    | UUID interno da loja (PK `stores.id`) — não é o `store_number` |
| `storeName` | string    | Nome operacional da loja                                       |
| `vendorId`  | string    | Identificador da marca da loja                                 |
| `timezone`  | string    | Fuso horário IANA da loja (ex.: `America/Sao_Paulo`)           |
| `channels`  | object\[] | Canais de vendas onde os produtos devem ser atualizados        |

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

| Campo                  | Tipo   | Descrição                                                                                      |
| ---------------------- | ------ | ---------------------------------------------------------------------------------------------- |
| `channelId`            | string | UUID interno do canal de vendas (PK `channels.id`) — não é o `channel_id` externo do agregador |
| `channelReferenceName` | string | Nome do canal de vendas (ex.: `iFood`, `Rappi`) — não do fulfillment                           |
| `listName`             | string | Nome do menu nessa loja/canal                                                                  |

### `data.products[n]`

| Campo                       | Tipo           | Descrição                                                                                                                                                                                                                                                                                                                                                                      |
| --------------------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `productId`                 | string         | Identificador do produto                                                                                                                                                                                                                                                                                                                                                       |
| `name`                      | string         | Nome do produto                                                                                                                                                                                                                                                                                                                                                                |
| `description`               | string         | Descrição do produto                                                                                                                                                                                                                                                                                                                                                           |
| `standardTime`              | boolean        | Se aplica o tempo de preparo padrão                                                                                                                                                                                                                                                                                                                                            |
| `featured`                  | boolean        | Se o produto está em destaque                                                                                                                                                                                                                                                                                                                                                  |
| `active`                    | boolean        | Visibilidade no menu; não reflete estoque nem disponibilidade operacional (isso viaja em [`product.availability_changed`](/pt/webhook-reference/product-availability-changed))                                                                                                                                                                                                 |
| `type`                      | string         | Tipo de item: `PRODUCTO`, `MODIFIER`, `COMPLEMENT` ou `COMBO`                                                                                                                                                                                                                                                                                                                  |
| `priceInfo`                 | object         | Preços resolvidos do produto                                                                                                                                                                                                                                                                                                                                                   |
| `priceInfo.pointPrice`      | number         | Preço em pontos                                                                                                                                                                                                                                                                                                                                                                |
| `priceInfo.price`           | number         | Preço resolvido (`0` para combos)                                                                                                                                                                                                                                                                                                                                              |
| `priceInfo.referencePrice`  | number         | Preço de referência quando aplicável no catálogo — para `COMBO` é o valor real                                                                                                                                                                                                                                                                                                 |
| `priceInfo.suggestedPrice`  | number         | Preço sugerido quando aplicável no catálogo                                                                                                                                                                                                                                                                                                                                    |
| `taxInfo`                   | object\[]      | Informação fiscal — `{ vatRatePercentage }`                                                                                                                                                                                                                                                                                                                                    |
| `productModifiers`          | object\[]      | Referências de grupos de modificadores — `{ modifierId, position, overrides? }`. A `position` é **por produto** (o mesmo grupo pode ir em outra posição em outro produto), e `overrides[]` leva o preço da opção **para este produto neste menu**. Mesma estrutura que em [`menu.updated`](/pt/webhook-reference/menu-updated-v2#datamenuproductsnproductmodifiersnoverridesn) |
| `schedules`                 | object\[]      | Disponibilidade por horário                                                                                                                                                                                                                                                                                                                                                    |
| `images`                    | object\[]      | Imagens do produto                                                                                                                                                                                                                                                                                                                                                             |
| `upselling`                 | string\[]      | IDs de produtos sugeridos como upsell                                                                                                                                                                                                                                                                                                                                          |
| `crossSelling`              | string\[]      | IDs de produtos sugeridos como cross-sell                                                                                                                                                                                                                                                                                                                                      |
| `tags`                      | string\[]      | Tags do produto                                                                                                                                                                                                                                                                                                                                                                |
| `additionalInfo`            | object         | Metadados extras                                                                                                                                                                                                                                                                                                                                                               |
| `additionalInfo.assignedAt` | string \| null | Data em que o produto entrou no menu, em ISO 8601 UTC. Ver [Data de atribuição ao menu](#data-de-atribuição-ao-menu)                                                                                                                                                                                                                                                           |

### `data.modifierGroups[n]`

Mesma estrutura que em [`menu.updated`](/pt/webhook-reference/menu-updated-v2#datamenumodifiergroupsn).

### `data.categories[n]`

Mesma estrutura que em [`menu.updated`](/pt/webhook-reference/menu-updated-v2#datamenucategoriesn), incluindo `assignedAt` — a data em que a **categoria** entrou no menu, com a mesma semântica da do produto.

## Data de atribuição ao menu

`additionalInfo.assignedAt` (produto) e `categories[n].assignedAt` (categoria) indicam quando a entidade entrou no menu — dado de **pertencimento**, não de edição. Semântica completa, formato e casos extremos em [`menu.updated` → Data de atribuição ao menu](/pt/webhook-reference/menu-updated-v2#data-de-atribuição-ao-menu), referência canônica do campo.

**Não** viaja em [`product.price_updated`](/pt/webhook-reference/product-price-updated) nem em [`product.availability_changed`](/pt/webhook-reference/product-availability-changed): esses eventos transmitem apenas seu delta.

## Comportamento incremental

| Situação                                              | Resultado     |
| ----------------------------------------------------- | ------------- |
| Produto no payload, existe no sistema externo         | Atualizado    |
| Produto no payload, não existe no sistema externo     | Criado        |
| Produto **não** no payload, existe no sistema externo | Sem alteração |

`product.updated` nunca remove produtos — não existe forma de expressar "excluir" dentro deste evento. Para remover um produto, use [`menu.updated`](/pt/webhook-reference/menu-updated-v2) enviando o menu completo sem esse produto.

## Uso

Consulte o guia [Publicação de produto](/pt/guides/product-publication) para o fluxo completo de processamento.
