Ir para o conteúdo

Autorizar Descontos

Recebe o carrinho + cliente e devolve o mesmo carrinho com os descontos exclusivos autorizados por item. É a segunda operação do fluxo de PDV, chamada com o carrinho montado, antes de fechar a compra.

Operação de leitura

Autorizar descontos apenas lê ofertas e devolve o carrinho com os descontos calculados. Nada é gravado — a venda só é registrada na Operação 3.

Item Valor
URL POST /api/v1/tenants/{tenantId}/discounts/authorize
Método POST
Autenticação Basic Auth
Content-Type application/json

Request

{
  "sessionId": "abc-10",
  "protocol": "ROCK",
  "customer": {
    "id": "10098075012",
    "type": "CPF"
  },
  "sale": {
    "id": "ticket-001",
    "store": { "id": "LOJA-001", "posId": "PDV-01", "employeeId": "EMP-001" },
    "date": "2026-05-26T16:00:00.000-03:00",
    "amount": 150.000000,
    "ignoreDiscount": false,
    "items": [
      {
        "id": "1",
        "gtin": "7891234567890",
        "unitPrice": 25.000000,
        "unitMeasure": "UN",
        "quantity": 3.000000,
        "ignoreDiscount": false,
        "discounts": [
          {
            "partnerPromotionId": "0",
            "unitDiscount": 1.50000000,
            "unitPriceWithDiscount": 23.50000000,
            "quantity": 3.000000
          }
        ],
        "increases": []
      }
    ]
  }
}

Campos

Campo Tipo Obrigatório Descrição
sessionId string Sim Identificador da sessão do PDV
protocol string Não Protocolo (usar ROCK)
customer object Não Ausente/null → carrinho é devolvido sem descontos (echo)
customer.id string Não CPF/CNPJ. Vazio/null → echo
customer.type string Condicional Obrigatório se customer.id presente (CPF/CNPJ)
sale object Sim Dados da venda
sale.id string Não ID do ticket (ecoado como sale.ticketId)
sale.store.id string Sim Código externo da loja
sale.date OffsetDateTime Sim Data/hora da venda (ISO 8601 com offset)
sale.amount number Não Valor total da venda
sale.items array Sim (não vazio) Itens do carrinho
sale.items[].id string — ID sequencial do item
sale.items[].gtin string Sim GTIN/EAN do produto
sale.items[].unitPrice number Sim Preço unitário
sale.items[].unitMeasure string Sim Unidade de medida
sale.items[].quantity number Sim Quantidade
sale.items[].ignoreDiscount boolean Não true → item não recebe desconto exclusivo
sale.items[].discounts array Não Descontos externos pré-existentes (preservados)
sale.items[].discounts[].partnerPromotionId string — "0" identifica desconto externo a preservar

Response 200 OK

{
  "sessionId": "abc-10",
  "customer": { "id": "10098075012" },
  "sale": {
    "store": { "id": "LOJA-001", "posId": "PDV-01", "employeeId": "EMP-001" },
    "date": "2026-05-26T16:05:00.000-03:00",
    "amount": 150.0000,
    "items": [
      {
        "id": "1",
        "gtin": "7891234567890",
        "unitPrice": 25.00,
        "unitMeasure": "fardo",
        "quantity": 3,
        "ignoreDiscount": false,
        "discounts": [
          {
            "promotionId": "12345",
            "partnerPromotionId": "PROMO-EXT-001",
            "unitPriceWithDiscount": 20.00000000,
            "unitDiscount": 5.00000000,
            "quantity": 2
          },
          {
            "promotionId": null,
            "partnerPromotionId": "0",
            "unitPriceWithDiscount": 23.50,
            "unitDiscount": 1.50,
            "quantity": 3
          }
        ]
      }
    ]
  },
  "messages": []
}

Comportamentos observáveis

Campo / comportamento Descrição
discounts[].promotionId ID do desconto Rock. null para descontos externos
discounts[].partnerPromotionId "0" para descontos externos preservados
Casas decimais Valores de desconto com até 8 casas decimais
Todos os itens retornam Todos os itens do request voltam no response (com ou sem desconto)

Comportamento de \"echo\"

Quando o cliente não é identificado, não é encontrado, ou está em pré-cadastro, o carrinho é devolvido sem sugerir descontos — ou seja, o mesmo carrinho de volta.

Descontos externos são preservados

Descontos com partnerPromotionId = "0" informados no request são preservados e nunca alterados pela Rock Conecta.

Sem ofertas disponíveis

Quando não há ofertas para o cliente, o response volta sem descontos e pode incluir uma mensagem INFO em messages.


Status codes

HTTP Cenário
200 Autorização processada (com ou sem descontos)
400 Erro de validação (campos obrigatórios, documento inválido)
401 Credenciais inválidas
404 Tenant não encontrado ou inativo
503 Banco do tenant indisponível

Detalhes do formato de erro em Tratamento de Erros.


Exemplo — curl

curl -X POST "https://<BASE_URL>/api/v1/tenants/<TENANT_ID>/discounts/authorizations" \
  -u "<CLIENT_ID>:<CLIENT_SECRET>" \
  -H "Content-Type: application/json" \
  -d '{ "sessionId": "abc-10", "protocol": "ROCK", "customer": { "id": "10098075012", "type": "CPF" }, "sale": { "store": { "id": "LOJA-001" }, "date": "2026-05-26T16:00:00.000-03:00", "items": [ { "id": "1", "gtin": "7891234567890", "unitPrice": 25.00, "unitMeasure": "UN", "quantity": 1 } ] } }'

Referências