Quando houver a necessidade de interação com a API na totalização dos valores do PDV.
Na maioria dos casos, é utilizado para trazer os descontos ou acréscimos que serão aplicados na venda atual e a regra fica por conta do parceiro. Pode ser utilizado também para inclusão de um produto não fiscal na venda.
Este evento ocorre no subtotal da venda, após os produtos já terem sido inseridos, restando apenas a etapa de pagamento.
POST {url}
Parâmetros do Corpo (Body Parameters)
| Chave json | TIPO | DESCRIÇÃO |
|---|---|---|
| ID | String | Identificador único da venda |
| Version | String | Versão da API |
| Operation | String | Durante a interação com esse evento será retorna do valor cotSubtotalSale, indicando que é uma operação no subtotal da venda |
| Sale | Object Json | Venda |
| Sale.Increase | Currency | Acréscimo aplicado na venda |
| Sale.Discount | Currency | Desconto aplicado no venda |
| Sale.ID | String | Identificador único da venda |
| Sale.Total | Currency | Valor total da venda |
| Sale.header | Object Json | Cabeçalho da venda |
| Sale.header.idStore | Integer | Identificador da loja que gerou a venda |
| Sale.header.idTerminal | Integer | Identificador do terminal/checkout que gerou a venda |
| Sale.header.idDocument | Integer | Identificador da venda |
| Sale.header.cooDocument | Integer | Coo do documento |
| Sale.header.idUser | Integer | Identificador do operador que realizou a venda |
| Sale.header.idInvoiceKey | String | Chave da venda gerada para acessar o documento na SEFAZ |
| Sale.header.accountingDate | Date | Data da emissão da venda |
| Sale.header.dateTimeIssue | DateTime | Data e hora da emissão da venda |
| Sale.header.identification | Array object Json | Lista de identificação do consumidor ou cliente |
| Sale.header.identification[0].document | String | Documento do cliente ou consumidor |
| Sale.header.identification[0].partnerCode | String | Código do parceiro |
| Sale.header.identification[0].documentType | String | Tipo do documento (CPF ou CNPJ) |
| Sale.header.identification[0].identificationType | String | Tipo de identificação (citUnknown, citInternal, citInvoice, citReward) citUnknown - Desconhecido. citInternal - Identificação interna. citInvoice - Identificação fiscal (Nota fiscal paulista e outros). citReward - Identificação de recompensas, parceiros, etc. |
| Sale.items | Array object Json | Item da venda |
| Sale.items[0].internalCode | Integer | Código interno do item |
| Sale.items[0].itemNumber | Integer | Código item na venda |
| Sale.items[0].status | String | Status do item sttValid - Vendido sttCanceled - Cancelada |
| Sale.items[0].unitPrice | Currency | Valor unitário do item |
| Sale.items[0].increasePrice | Currency | Acréscimo aplicado no item |
| Sale.items[0].discountPrice | Currency | Desconto aplicado no item |
| Sale.items[0].captionPacking | String | Descrição da unidade |
| Sale.items[0].barCode | String | EAN do produto vendido |
| Sale.items[0].quantity | Integer | Quantidade do item |
| Sale.items[0].description | String | Descrição do item |
| Sale.items[0].totalPrice | Currency | Valor total liquido do item |
| Sale.items[0].sellerCode | Integer | Código do vendedor |
| Sale.items[0].idSegment | Integer | Identificador no segmento do item |
| Sale.items[0].dateTimeIssue | DateTiem | Data e hora e emissão do item |
| Sale.Items[0].Scale | Boolean | Indica se o produto é pesável |
| Sale.Items[0].OrderNumber | Integer | Número da pré-venda quando existir |
| Sale.Items[0].OrderType | String | Quando existir um número de prévenda(OrderNumber) será enviado o tipo da pré-venda: pstQuotation - Cotação (pode ser faturado mais de uma vez) |
| Sale.Items[0].partitionDiscount | Array object Json | Lista de desconto dado no item |
| Sale.Items[0].partitionDiscount[0].price | Currency | Desconto do item |
| Sale.Items[0].partitionDiscount[0].partnerCode | Integer | Código do parceiro que aplicou o desconto |
| Sale.Items[0].partitionDiscount[0].promotionCode | Integer | Código de promoção |
| Sale.Items[0].partitionDiscount[0].discountAmount | Integer | Quantidade do item |
| Sale.Items[0].partitionIncrease | Array object Json | Lista de acréscimo dado no item |
| Sale.Items[0].partitionIncrease[0].price | Currency | Desconto do item |
| Sale.Items[0].partitionIncrease[0].partnerCode | Integer | Código do parceiro que aplicou o acréscimo |
| Sale.Items[0].partitionIncrease[0].promotionCode | Integer | Código de promoção |
| Sale.Items[0].partitionIncrease[0].discountAmount | Integer | Quantidade do item |
| Sale.payments | Array object Json | Lista de pagamentos |
| Sale.payments[0].increase | Currency | Acréscimo aplicado no pagamento |
| Sale.payments[0].Discount | Currency | Desconto aplicado no pagamento |
| Sale.payments[0].total | Currency | Valor pago |
| Sale.payments[0].paymentType | String | Espécie de pagamento cptMoney - Espécie dinheiro; cptDebitCard - Espécie cartão de débito; cptCreditCard - Espécie cartão de crédito; cptBillet - Espécie boleto; cptCheck - Espécie cheque; cptPOS - Espécie POS; cptAgreement - Espécie convênio; cptPromissoryNote - Espécie nota promissório; cptFinancialCredit - Espécie crédito financeira; cptWorthDebit - Espécie vale débito; cptDigitalWallet - Espécie carteira digital; |
| Sale.payments[0].paymentNumber | Integer | Número da forma de pagamento |
| Sale.payments[0].dateTimeIssue | DateTime | Data e hora do pagamento |
| Sale.payments[0].AuthorizationCode | String | Numero da autorização TEF |
| Sale.payments[0].TransactionCanceledCode | String | Numero da autorização cancelamento TEF |
| Sale.payments[0].TransactionCode | String | Número do NSU host |
| Sale.payments[0].TypeWallet | String | Tipo da carteira digital |
Exemplo de uma venda simples contendo alguns itens com desconto.
{
"Execution":"cetContinue",
"ID":"001032001729538",
"Operation":"cotSubtotalSale",
"Sale":{
"ID":"001032001729538",
"Discount":0,
"Increase":0,
"Header":{
"AccountingDate":"2025-12-08T00:00:00",
"CooDocument":211,
"DateTimeIssue":"2025-12-08T13:36:43",
"IdDocument":1729538,
"IdInvoiceKey":"",
"IdStore":1,
"IdSupervisor":0,
"IdTerminal":32,
"IdUser":2,
"Identification":[
{
"Document":"47021161859",
"DocumentType":"cdtCPF",
"IdentificationType":"citInvoice",
"PartnerCode":0
}
],
"Status":"sttValid"
},
"Items":[
{
"BarCode":"7891000100103",
"CaptionPacking":"UN",
"Description":"LEITE COND MOCA LAT 395G",
"DiscountPrice":2.89,
"IdSegment":3,
"IncreasePrice":0,
"InternalCode":"4900",
"ItemNumber":1,
"PackingQuantity":1,
"PartitionDiscount":[
{
"DiscountAmount":1,
"IncreDiscType":21,
"PartnerCode":1,
"Price":2.89,
"PromotionCode":34
}
],
"Quantity":1,
"SellerCode":0,
"Status":"sttValid",
"TotalPrice":3.10,
"UnitPrice":5.99
},
{
"BarCode":"7891000100103",
"CaptionPacking":"UN",
"Description":"LEITE COND MOCA LAT 395G",
"DiscountPrice":0,
"IdSegment":3,
"IncreasePrice":0,
"InternalCode":"4900",
"ItemNumber":2,
"PackingQuantity":1,
"Quantity":1,
"SellerCode":0,
"Status":"sttValid",
"TotalPrice":5.99,
"UnitPrice":5.99
}
],
"Total":9.09
},
"Version":1
}
Exemplo contendo uma forma de pagamento, demonstrando que a venda recebeu um pagamento parcial, mas o cliente retornou para a tela de venda para inserir mais produtos e, em seguida, acessou novamente o subtotal.
{
"Execution":"cetContinue",
"ID":"001032001729538",
"Operation":"cotSubtotalSale",
"Sale":{
"ID":"001032001729538",
"Discount":0,
"Increase":0,
"Header":{
"AccountingDate":"2025-12-08T00:00:00",
"CooDocument":211,
"DateTimeIssue":"2025-12-08T13:36:43",
"IdDocument":1729538,
"IdInvoiceKey":"",
"IdStore":1,
"IdSupervisor":0,
"IdTerminal":32,
"IdUser":2,
"Identification":[
{
"Document":"47021161859",
"DocumentType":"cdtCPF",
"IdentificationType":"citInvoice",
"PartnerCode":0
}
],
"Status":"sttValid"
},
"Items":[
{
"BarCode":"7891000100103",
"CaptionPacking":"UN",
"Description":"LEITE COND MOCA LAT 395G",
"DiscountPrice":2.89,
"IdSegment":3,
"IncreasePrice":0,
"InternalCode":"4900",
"ItemNumber":1,
"PackingQuantity":1,
"PartitionDiscount":[
{
"DiscountAmount":1,
"IncreDiscType":21,
"PartnerCode":1,
"Price":2.89,
"PromotionCode":34
}
],
"Quantity":1,
"SellerCode":0,
"Status":"sttValid",
"TotalPrice":3.10,
"UnitPrice":5.99
},
{
"BarCode":"7891000100103",
"CaptionPacking":"UN",
"Description":"LEITE COND MOCA LAT 395G",
"DiscountPrice":0,
"IdSegment":3,
"IncreasePrice":0,
"InternalCode":"4900",
"ItemNumber":2,
"PackingQuantity":1,
"Quantity":1,
"SellerCode":0,
"Status":"sttValid",
"TotalPrice":5.99,
"UnitPrice":5.99
}
],
"Payments":[
{
"AuthorizationCode":"080006",
"Discount":0,
"ExpirationDateCard":"33/0",
"FirstDigitCard":"409601",
"FlagCard":"00001",
"IdWallet":"",
"Increase":0,
"InstallmentAmount":1,
"ItemNumber":1,
"LastDigitCard":"6263",
"NetworkCard":"00125",
"OwnerCard":"",
"PaymentNumber":9,
"PaymentType":"cptCreditCard",
"Total":2,
"TransactionCode":"000080006",
"TypeWallet":""
}
],
"Total":9.09
},
"Version":1
}
O tipo de resposta vai depender da ação que o integrador (parceiro) deseja realizar. As ações possíveis estão listadas abaixo no espaço Comandos para interação no subtotal.
Após finalizar a integração com o PDV, o integrador deverá retornar para o PDV utilizando a chave execution, informando cetCompleted ou cetInterrupt.
Veja como funciona o fluxo de interação entre o PDV e integrador.
Veja os detalhes de como retornar comprovantes para serem impresso pela chave json vouchersPrint. Clique aqui para acessar a documentação
Parâmetros do Corpo (Body Parameters)
| Chave | Tipo | Descrição |
|---|---|---|
| execution | String | Tipo de execução cetInterrupt - Indica que a interação com o integrador foi concluída e não há nenhuma ação a ser executada pelo PDV. |
| Sale | Object Json | Venda |
| Sale.items | Array object Json | Item da venda |
| Sale.Items[0].partitionDiscount | Array object Json | Lista de desconto dado no item |
| Sale.Items[0].partitionDiscount[0].price | Currency | Desconto do item |
| Sale.Items[0].partitionDiscount[0].partnerCode | Integer | Código do parceiro que aplicou o desconto |
| Sale.Items[0].partitionDiscount[0].promotionCode | Integer | Código de promoção |
| Sale.Items[0].partitionDiscount[0].discountAmount | Integer | Quantidade do item |
| Sale.Items[0].partitionIncrease | Array object Json | Lista de acréscimo dado no item |
| Sale.Items[0].partitionIncrease[0].price | Currency | Desconto do item |
| Sale.Items[0].partitionIncrease[0].partnerCode | Integer | Código do parceiro que aplicou o acréscimo |
| Sale.Items[0].partitionIncrease[0].promotionCode | Integer | Código de promoção |
| Sale.Items[0].partitionIncrease[0].discountAmount | Integer | Quantidade do item |
| vouchersPrint | Array Object json | Lista de comprovantes |
| vouchersPrint[0].text | string | Texto para ser impresso no comprovante |
Exemplo de uma resposta que aplica um desconto de R$ 0,30 no item 1 da venda, realiza a impressão de 2 comprovantes (vouchersPrint) e inclui uma mensagem (observation) que será impressa no rodapé do cupom
{
"execution":"cetCompleted",
"sale":{
"items":[
{
"itemNumber":1,
"partitionDiscount":[
{
"price":0.30,
"partnerCode":0,
"promotionCode":51,
"discountAmount":1
}
]
}
],
"vouchersPrint":[
{
"text":" CUPOM DESCONTO 1\r\n\r\n Cupom de 5% de desconto para \r\npróxima\r\ncompra, aplicado para todos os \r\nprodutos.\r\n\r\n[ImpBarra]1234567890\r\n[ImpFimBarra]\r\n"
},
{
"text":" CUPOM DESCONTO 2\r\n\r\n Cupom de 10% de desconto para \r\npróxima\r\ncompra, aplicado para todos os \r\nprodutos.\r\n\r\n[ImpBarra]1234567890\r\n[ImpFimBarra]\r\n"
}
],
"observation":"Voce poderia ter economizado R$ 10,00 de desconto com o Clube"
}
}
| Comando | Descrição |
|---|---|
| Solicitar para a aplicação de PDV que exiba uma caixa de diálogo ao operador com um campo editável | |
| Solicitar para a aplicação de PDV que exiba uma caixa de diálogo ao operador contendo uma lista com as opções predefinidas | |
| Exibi uma mensagem na tela no PDV | |
| Informar para API que houve falha no fluxo | |
| Solicitar para API que o fluxo seja interrompido |