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

# Atualizar grupo de complementos

> Atualiza os dados de um grupo de complementos existente.

Para gerenciar as opções do grupo, envie o array `options`:
- Para adicionar uma opção: envie `option_id`, `price` e demais campos.
- Para atualizar uma opção existente: envie `option_id` com os campos a atualizar.
- Para remover uma opção: envie `option_id` e `_destroy: true`.



## OpenAPI

````yaml /reference/api-catalogo.json put /api/partner/v1/catalog/option_groups/{id}
openapi: 3.1.0
info:
  title: API Catálogo
  version: '1.0'
  description: >-
    A API de catálogo é responsável por fornecer e gerenciar o catálogo completo
    do estabelecimento incluindo categorias, itens, grupos de complementos e
    opções.


    ## Autenticação


    Todas as requisições devem incluir obrigatoriamente os seguintes headers:


    - `X-API-KEY`: token do estabelecimento

    - `X-PARTNER-KEY`: token da integradora


    A ausência de qualquer um desses headers resultará na rejeição da
    requisição.


    ## Rate Limits


    Para o endpoint `GET /api/partner/v1/catalog`, o limite é de **5 requisições
    por minuto**.


    Para os demais endpoints do módulo de Catálogo, o limite é de **100
    requisições por minuto**.
  contact:
    email: integracao@cardapioweb.com
    url: https://cardapioweb.com
    name: Cardápio Web
servers:
  - url: https://integracao.sandbox.cardapioweb.com
    description: Sandbox
  - description: Produção
    url: https://integracao.cardapioweb.com
security:
  - partnerKey: []
    apiKey: []
tags:
  - name: Catálogo Completo
    description: Consulta do catálogo completo do estabelecimento.
  - name: Categorias
    description: Gerenciamento de categorias do cardápio.
  - name: Itens
    description: Gerenciamento de itens (produtos) do cardápio.
  - name: Grupos de Complementos
    description: Gerenciamento de grupos de complementos (option groups) do cardápio.
  - name: Opções
    description: Gerenciamento de opções (subitens/complementos individuais) do cardápio.
  - name: Imagens
    description: Upload e remoção de imagens de categorias, itens e opções.
paths:
  /api/partner/v1/catalog/option_groups/{id}:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
        description: ID do grupo de complementos.
    put:
      tags:
        - Grupos de Complementos
      summary: Atualizar grupo de complementos
      description: >-
        Atualiza os dados de um grupo de complementos existente.


        Para gerenciar as opções do grupo, envie o array `options`:

        - Para adicionar uma opção: envie `option_id`, `price` e demais campos.

        - Para atualizar uma opção existente: envie `option_id` com os campos a
        atualizar.

        - Para remover uma opção: envie `option_id` e `_destroy: true`.
      operationId: updateOptionGroup
      requestBody:
        $ref: '#/components/requestBodies/UpdateOptionGroup'
      responses:
        '200':
          description: Grupo de complementos atualizado com sucesso.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OptionGroup'
        '400':
          $ref: '#/components/responses/ValidationError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
components:
  requestBodies:
    UpdateOptionGroup:
      required: true
      content:
        application/json:
          schema:
            type: object
            properties:
              name:
                type: string
                description: Nome do grupo de complementos.
                minLength: 1
                maxLength: 100
              status:
                type: string
                enum:
                  - ACTIVE
                  - INACTIVE
                  - MISSING
                description: |-
                  Status do grupo de complementos.
                  - `ACTIVE`: grupo ativo e visível.
                  - `INACTIVE`: grupo oculto.
                  - `MISSING`: grupo em falta.
                default: ACTIVE
              choice_type:
                type: string
                enum:
                  - SINGLE
                  - MULTIPLE
                  - SUMMABLE
                description: >-
                  Regra de escolha das opções no grupo.

                  - `SINGLE`: apenas uma opção pode ser escolhida.

                  - `MULTIPLE`: mais de uma opção pode ser escolhida, sem
                  repetição.

                  - `SUMMABLE`: mais de uma opção pode ser escolhida, com
                  repetição permitida.
                default: SINGLE
              price_calculation_type:
                type: string
                enum:
                  - SUM
                  - MEAN
                  - MAX
                  - MIN
                description: >-
                  Regra de cálculo do preço quando múltiplas opções são
                  selecionadas.

                  - `SUM`: soma dos preços das opções selecionadas.

                  - `MEAN`: média dos preços das opções selecionadas.

                  - `MAX`: preço da opção mais cara entre as selecionadas.

                  - `MIN`: preço da opção mais barata entre as selecionadas.
                default: SUM
              minimum_quantity:
                type: integer
                description: Quantidade mínima de opções.
                minimum: 0
              maximum_quantity:
                type: integer
                description: Quantidade máxima de opções. Deve ser >= `minimum_quantity`.
                minimum: 1
              options:
                type: array
                description: Opções a associar/atualizar/remover no grupo.
                items:
                  type: object
                  maxProperties: 60
                  required:
                    - option_id
                  properties:
                    option_id:
                      type: integer
                      description: ID da opção a associar ao grupo.
                    price:
                      type: number
                      description: >-
                        Preço da opção dentro deste grupo. Deve ter no máximo 2
                        casas decimais.
                      minimum: 0
                    max_quantity:
                      type:
                        - integer
                        - 'null'
                      description: >-
                        Quantidade máxima desta opção. Relevante quando
                        `choice_type` é `SUMMABLE`.
                      minimum: 1
                    index:
                      type:
                        - integer
                        - 'null'
                      description: Índice de exibição da opção dentro do grupo
                      minimum: 0
                    badge:
                      type:
                        - string
                        - 'null'
                      enum:
                        - best_seller
                        - new_item
                        - recommended
                        - limited_edition
                        - null
                      description: |-
                        Badge de destaque da opção dentro do grupo.
                        - `best_seller`: mais vendido.
                        - `new_item`: novidade.
                        - `recommended`: recomendado.
                        - `limited_edition`: edição limitada.
                    _destroy:
                      type: boolean
                      description: >-
                        Se `true`, remove a associação da opção com o grupo de
                        complementos. A opção em si não é excluída, apenas
                        desvinculada do grupo.
          examples:
            update_basic:
              summary: Atualizar dados básicos
              value:
                name: Tamanho da pizza
                maximum_quantity: 3
            add_option:
              summary: Adicionar opção ao grupo
              value:
                options:
                  - option_id: 2886
                    price: 25
                    index: 4
            remove_option:
              summary: Remover opção do grupo
              value:
                options:
                  - option_id: 2886
                    _destroy: true
  schemas:
    OptionGroup:
      type: object
      title: Grupo de complementos
      description: >-
        Grupo de complementos reutilizável que pode ser associado a múltiplos
        itens.
      properties:
        id:
          type: integer
          description: Identificador único do grupo de complementos.
        name:
          type: string
          description: Nome do grupo de complementos.
        status:
          type: string
          enum:
            - ACTIVE
            - INACTIVE
            - MISSING
          description: |-
            Status do grupo de complementos.
            - `ACTIVE`: grupo ativo e visível.
            - `INACTIVE`: grupo oculto.
            - `MISSING`: grupo em falta.
        choice_type:
          type: string
          enum:
            - SINGLE
            - MULTIPLE
            - SUMMABLE
          description: >-
            Regra de escolha das opções no grupo.

            - `SINGLE`: apenas uma opção pode ser escolhida.

            - `MULTIPLE`: mais de uma opção pode ser escolhida, sem repetição.

            - `SUMMABLE`: mais de uma opção pode ser escolhida, com repetição
            permitida.
        price_calculation_type:
          type: string
          enum:
            - SUM
            - MEAN
            - MAX
            - MIN
          description: |-
            Regra de cálculo do preço quando múltiplas opções são selecionadas.
            - `SUM`: soma dos preços das opções selecionadas.
            - `MEAN`: média dos preços das opções selecionadas.
            - `MAX`: preço da opção mais cara entre as selecionadas.
            - `MIN`: preço da opção mais barata entre as selecionadas.
        minimum_quantity:
          type: integer
          description: Quantidade mínima de opções que devem ser selecionadas.
          minimum: 0
        maximum_quantity:
          type: integer
          description: Quantidade máxima de opções que podem ser selecionadas.
          minimum: 1
        options:
          type: array
          description: >-
            Lista das opções do grupo, com seus preços e configurações dentro do
            grupo.
          items:
            $ref: '#/components/schemas/OptionInGroup'
    OptionInGroup:
      type: object
      title: Opção (no grupo de complemento)
      description: Opção dentro de um grupo de complementos.
      properties:
        id:
          type: integer
          description: Identificador único da opção (subitem).
        name:
          type: string
          description: Nome da opção.
        description:
          type:
            - 'null'
            - string
          description: Descrição da opção.
        external_code:
          type:
            - 'null'
            - string
          description: Código externo da opção.
        status:
          type: string
          enum:
            - ACTIVE
            - INACTIVE
            - MISSING
          description: |-
            Status da opção.
            - `ACTIVE`: opção ativa e visível.
            - `INACTIVE`: opção oculta.
            - `MISSING`: opção em falta.
        image:
          $ref: '#/components/schemas/Image'
          description: Imagem da opção.
        cost_price:
          type: number
          description: Preço de custo da opção.
          minimum: 0
        active_stock_control:
          type: boolean
          description: Indica se o controle de estoque está ativo.
        stock:
          type:
            - number
            - 'null'
          description: Quantidade disponível em estoque.
        index:
          type:
            - integer
            - 'null'
          description: Índice de exibição da opção dentro do grupo.
        max_quantity:
          type:
            - integer
            - 'null'
          description: >-
            Quantidade máxima desta opção que pode ser selecionada dentro do
            grupo de complementos. Relevante quando `choice_type` do grupo é
            `SUMMABLE`.
        price:
          type: number
          description: >-
            Preço da opção dentro deste grupo. Deve ser um número positivo com
            no máximo 2 casas decimais. Uma mesma opção pode ter preços
            diferentes em grupos diferentes.
          minimum: 0
        badge:
          x-stoplight:
            id: l0rqsi0rwrrzs
          description: |-
            Badge de destaque da opção dentro do grupo.
            - `best_seller`: mais vendido.
            - `new_item`: novidade.
            - `recommended`: recomendado.
            - `limited_edition`: edição limitada.
          enum:
            - best_seller
            - new_item
            - recommended
            - limited_edition
    Error:
      title: Error
      type: object
      description: Resposta de erro padrão da API.
      properties:
        code:
          type: integer
          description: Código interno de identificação do erro.
        message:
          type: string
          description: Mensagem de resumo do erro.
        details:
          type: string
          description: Detalhes adicionais do erro (quando disponível).
        errors:
          type: object
          description: Erros de validação por campo (quando disponível).
          additionalProperties:
            type: array
            items:
              type: string
      required:
        - code
        - message
    Unauthorized:
      type: object
      title: Unauthorized
      description: >-
        Resposta de erro de autenticação. Retornado quando os headers
        `X-API-KEY` ou `X-PARTNER-KEY` estão ausentes ou são inválidos.
      examples:
        - code: 4010
          message: Token inválido.
      properties:
        code:
          type: integer
          description: Código interno de identificação do erro.
        message:
          type: string
          description: Mensagem de resumo do erro.
      required:
        - code
        - message
    Image:
      title: Image
      type:
        - object
        - 'null'
      description: Imagem associada a um recurso (categoria, item ou opção).
      properties:
        image_url:
          type: string
          format: uri
          description: URL da imagem versão padrão.
        thumbnail_url:
          type: string
          format: uri
          description: URL da imagem versão reduzida (thumbnail).
  responses:
    ValidationError:
      description: Erro de validação. Os dados enviados não passaram nas validações.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            validation_error:
              summary: Erro de validação com detalhes por campo
              value:
                code: 4001
                message: Requisição inválida.
                errors:
                  name:
                    - não pode ficar em branco
                    - 'é muito curto (mínimo: 1 caractere)'
                  price:
                    - não é um número
    Unauthorized:
      description: >-
        Não autorizado. O token no header `X-API-KEY` não foi enviado ou é
        inválido.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Unauthorized'
          example:
            code: 4010
            message: Token inválido.
    NotFound:
      description: Recurso não encontrado.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            code: 4041
            message: Recurso não encontrado.
    TooManyRequests:
      description: >-
        Muitas requisições foram feitas em um curto período. Verifique as regras
        de rate limit na descrição da API.
      content: {}
  securitySchemes:
    partnerKey:
      name: X-PARTNER-KEY
      type: apiKey
      in: header
      description: >-
        Token de autenticação da integradora. Para ter esse token, a integradora
        precisa estar previamente cadastrada em nosso sistema. Deve ser enviado
        no header `X-PARTNER-KEY`.
    apiKey:
      name: X-API-KEY
      type: apiKey
      in: header
      description: Token de autenticação da API. Deve ser enviado no header `X-API-KEY`.

````