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¶
- Identificar Cliente — Operação 1
- Registrar Venda — Operação 3
- Tratamento de Erros