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

# Update Promo

> Atualiza uma promoção.
<Note>O corpo é o mesmo da criação e substitui a promoção inteira, alvos e faixas inclusive. As faixas são recriadas e ganham IDs novos. Para só ativar ou desativar, use o toggle.</Note>



## OpenAPI

````yaml /openapi/promos.yaml patch /app/promo/{promo-id}
openapi: 3.1.0
info:
  title: CentralCart API
  version: 1.0.0
servers:
  - url: https://api.centralcart.io/v1
    description: Produção
security:
  - bearerAuth: []
paths:
  /app/promo/{promo-id}:
    patch:
      tags:
        - Promos
      summary: Update Promo
      description: >-
        Atualiza uma promoção.

        <Note>O corpo é o mesmo da criação e substitui a promoção inteira, alvos
        e faixas inclusive. As faixas são recriadas e ganham IDs novos. Para só
        ativar ou desativar, use o toggle.</Note>
      operationId: updatePromo
      parameters:
        - name: promo-id
          in: path
          required: true
          description: ID da promoção
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PromoInput'
            example:
              name: Leve mais, pague menos
              type: PROGRESSIVE
              condition_mode: VALUE
              starts_at: '2026-10-01T00:00:00.000-03:00'
              targets:
                - type: STORE
              tiers:
                - min_amount: 100
                  reward_type: VALUE
                  reward_value: 15
      responses:
        '200':
          description: Promoção atualizada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Promo'
        '404':
          description: Promoção não encontrada.
        '422':
          description: Dados inválidos, ou alvo com produto ou categoria que não é da loja.
components:
  schemas:
    PromoInput:
      type: object
      required:
        - name
        - type
        - condition_mode
        - starts_at
        - targets
        - tiers
      properties:
        name:
          type: string
          description: Nome da promoção, até 35 caracteres
        type:
          type: string
          enum:
            - PROGRESSIVE
            - BUY_X_PAY_Y
          description: >-
            `PROGRESSIVE` dá desconto maior conforme o carrinho cresce.
            `BUY_X_PAY_Y` dá desconto em produtos escolhidos ao atingir o mínimo
        condition_mode:
          type: string
          enum:
            - QUANTITY
            - VALUE
          description: Se o mínimo das faixas é em unidades ou em valor (R$)
        enabled:
          type: boolean
          description: >-
            Ativa a promoção. Padrão `true` na criação; na atualização mantém o
            estado atual
        starts_at:
          type: string
          description: Início da promoção
        ends_at:
          type: string
          nullable: true
          description: Fim da promoção. Omita ou envie `null` para não expirar
        targets:
          type: array
          description: Produtos que contam para atingir o mínimo, de 1 a 10 alvos
          items:
            $ref: '#/components/schemas/Target'
        tiers:
          type: array
          description: >-
            Faixas, de 1 a 10, cada uma com um mínimo diferente. O `BUY_X_PAY_Y`
            aceita uma faixa só
          items:
            $ref: '#/components/schemas/PromoTierInput'
    Promo:
      type: object
      properties:
        id:
          type: number
          description: ID da promoção
        store_id:
          type: number
          description: ID da loja
        name:
          type: string
          description: Nome da promoção
        type:
          type: string
          enum:
            - PROGRESSIVE
            - BUY_X_PAY_Y
          description: Tipo da promoção
        condition_mode:
          type: string
          enum:
            - QUANTITY
            - VALUE
          description: Se o mínimo das faixas é em unidades ou em valor (R$)
        enabled:
          type: boolean
          description: Indica se a promoção está ativada
        starts_at:
          type: string
          description: Início da promoção
        ends_at:
          type: string
          nullable: true
          description: Fim da promoção. `null` não expira
        created_at:
          type: string
          description: Data de criação
        updated_at:
          type: string
          description: Data da última atualização
        targets:
          type: array
          description: Produtos que contam para atingir o mínimo
          items:
            $ref: '#/components/schemas/Target'
        tiers:
          type: array
          description: Faixas, do menor para o maior mínimo
          items:
            $ref: '#/components/schemas/PromoTier'
    Target:
      type: object
      description: Onde a regra vale. `STORE` é a loja inteira e não leva `id`.
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - STORE
            - CATEGORY
            - PRODUCT
          description: Tipo do alvo. Variação de produto é `PRODUCT` com o ID da variação
        id:
          type: number
          description: ID da categoria ou do produto. Obrigatório fora do `STORE`
    PromoTierInput:
      type: object
      required:
        - min_amount
        - reward_type
      properties:
        min_amount:
          type: number
          description: >-
            Mínimo para liberar a faixa, em unidades ou em R$ conforme o
            `condition_mode`
        reward_type:
          type: string
          enum:
            - PERCENTAGE
            - VALUE
            - FREE
          description: >-
            `PERCENTAGE` e `VALUE` descontam percentual ou valor em R$. `FREE`
            sai de graça e só vale no `BUY_X_PAY_Y`
        reward_value:
          type: number
          description: Percentual (até 100) ou valor em R$. Obrigatório fora do `FREE`
        reward_quantity:
          type: number
          description: >-
            Quantas unidades de cada produto da recompensa saem com desconto.
            Obrigatório no `BUY_X_PAY_Y`
        targets:
          type: array
          description: >-
            Produtos que o cliente leva com desconto, até 10, só do tipo
            `PRODUCT`. Obrigatório no `BUY_X_PAY_Y`
          items:
            $ref: '#/components/schemas/Target'
    PromoTier:
      type: object
      properties:
        id:
          type: number
          description: ID da faixa
        store_id:
          type: number
          description: ID da loja
        promo_id:
          type: number
          description: ID da promoção
        min_amount:
          type: number
          description: >-
            Mínimo para liberar a faixa, em unidades ou em R$ conforme o
            `condition_mode`
        reward_type:
          type: string
          enum:
            - PERCENTAGE
            - VALUE
            - FREE
          description: Tipo de recompensa
        reward_value:
          type: number
          nullable: true
          description: >-
            Percentual ou valor em R$ do desconto. `null` quando a recompensa é
            `FREE`
        reward_quantity:
          type: number
          nullable: true
          description: >-
            Quantas unidades de cada produto da recompensa saem com desconto. Só
            no `BUY_X_PAY_Y`
        created_at:
          type: string
          description: Data de criação
        updated_at:
          type: string
          description: Data da última atualização
        targets:
          type: array
          description: Produtos que o cliente leva com desconto. Só no `BUY_X_PAY_Y`
          items:
            $ref: '#/components/schemas/Target'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Token de API gerado no painel da CentralCart.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.