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

# Create Promo

> Cria uma promoção.



## OpenAPI

````yaml /openapi/promos.yaml post /app/promo
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:
    post:
      tags:
        - Promos
      summary: Create Promo
      description: Cria uma promoção.
      operationId: createPromo
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PromoInput'
            examples:
              progressive:
                summary: Desconto progressivo
                value:
                  name: Leve mais, pague menos
                  type: PROGRESSIVE
                  condition_mode: QUANTITY
                  starts_at: '2026-10-01T00:00:00.000-03:00'
                  targets:
                    - type: CATEGORY
                      id: 40
                  tiers:
                    - min_amount: 2
                      reward_type: PERCENTAGE
                      reward_value: 10
                    - min_amount: 3
                      reward_type: PERCENTAGE
                      reward_value: 15
              buy_x_pay_y:
                summary: Compre 3, leve 4
                value:
                  name: Compre 3, leve 4
                  type: BUY_X_PAY_Y
                  condition_mode: QUANTITY
                  starts_at: '2026-10-01T00:00:00.000-03:00'
                  ends_at: '2026-10-31T23:59:59.000-03:00'
                  targets:
                    - type: STORE
                  tiers:
                    - min_amount: 3
                      reward_type: FREE
                      reward_quantity: 1
                      targets:
                        - type: PRODUCT
                          id: 301
      responses:
        '200':
          description: Promoção criada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Promo'
              example:
                id: 8
                store_id: 2
                name: Compre 3, leve 4
                type: BUY_X_PAY_Y
                condition_mode: QUANTITY
                enabled: true
                starts_at: '2026-10-01T00:00:00.000-03:00'
                ends_at: '2026-10-31T23:59:59.000-03:00'
                created_at: '2026-09-28T14:10:45.000-03:00'
                updated_at: '2026-09-28T14:10:45.000-03:00'
                targets:
                  - type: STORE
                tiers:
                  - id: 23
                    store_id: 2
                    promo_id: 8
                    min_amount: 3
                    reward_type: FREE
                    reward_value: null
                    reward_quantity: 1
                    created_at: '2026-09-28T14:10:45.000-03:00'
                    updated_at: '2026-09-28T14:10:45.000-03:00'
                    targets:
                      - type: PRODUCT
                        id: 301
        '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.