Pré-venda ⭐
Seu sistema cria e acumula múltiplas pré-vendas abertas ao mesmo tempo. Cada operador visualiza a lista no Smart POS e finaliza a que é sua — ideal para delivery, postos de combustível, mesas de restaurante e atendimento em campo.
Diferente do TEF Mobile (que processa um pagamento por vez), a Pré-venda permite que várias solicitações coexistam simultaneamente. Além do valor, você pode enviar a lista de produtos com código, quantidade e descrição — útil para exibição no Smart POS e para integração com documentos fiscais.
Endpoints
| Método | Endpoint | Descrição |
|---|---|---|
POST | /pre-venda | Criar pré-venda |
GET | /pre-venda/{identificador} | Consultar status |
DELETE | /pre-venda/{identificador} | Interromper solicitação |
DELETE | /pre-venda/{identificador}?forca=true | Forçar interrupção (em processamento) |
Validando no portal antes de integrar
No Portal do Cliente, você pode criar pré-vendas manualmente e ver o comportamento completo no Smart POS antes de integrar.
Criando uma pré-venda
O bloco Produtos é opcional: você pode criar a pré-venda apenas com valor e descrição, ou incluir a lista de itens para exibição no Smart POS.
Sem produtos:
curl --request POST \
--url 'https://api.pinpdv.com.br/pre-venda' \
--header 'Authorization: Bearer {SEU_TOKEN}' \
--header 'Content-Type: application/json' \
--data '{
"Identificador": "mesa-01",
"Valor": 34.83,
"Descricao": "Mesa 01"
}'Com produtos:
curl --request POST \
--url 'https://api.pinpdv.com.br/pre-venda' \
--header 'Authorization: Bearer {SEU_TOKEN}' \
--header 'Content-Type: application/json' \
--data '{
"Identificador": "mesa-01",
"Valor": 34.83,
"Descricao": "Mesa 01",
"Parcelas": 1,
"TipoPagamento": 3,
"PinPdvId": 1,
"Produtos": [
{
"Identificador": "coca-01",
"Quantidade": 2
}
]
}'Apenas Identificador e Valor são obrigatórios. Diferente do TEF Mobile, o dispositivo (PinPdvId) é opcional — a pré-venda fica disponível na lista do Smart POS para qualquer operador finalizar. Informe o PinPdvId apenas se quiser direcionar a pré-venda para um Smart POS específico.
Tipo de pagamento, parcelas e produtos também são opcionais — o operador pode selecionar no Smart POS. Os valores de TipoPagamento e os status estão em Referência.
200 - OK
{
"id": 8240,
"identificador": "mesa-01",
"descricao": "Mesa 01",
"valor": 34.83,
"parcelas": 1,
"tipoPagamento": 3,
"pagamentoTipo": { "key": 3, "value": "Debito" },
"status": { "key": 0, "value": "Aguardando" },
"situacao": { "key": 0, "value": "Aguardando" },
"grupos": [ { "identificador": "grupo-padrao", "nome": "Padrão" } ],
"produtos": null,
"vendas": []
}A pré-venda criada aparecerá automaticamente na lista do Smart POS para o operador finalizar.
Pagamento em dinheiro
A Pré-venda também aceita pagamento em dinheiro (TipoPagamento: 1). Nesse caso o operador registra o recebimento em espécie no Smart POS e a transação retorna com bandeira e adquirente iguais a "Dinheiro" — sem passar por adquirente de cartão.
Acompanhando o status
Depois de criar a pré-venda, você precisa saber quando o operador a finaliza no Smart POS — e se o pagamento foi aprovado ou negado. Há duas formas de receber esse retorno; escolha a que melhor se encaixa no seu sistema:
| Forma | Quando usar | Como funciona |
|---|---|---|
| Webhook (recomendado) | Você tem um endpoint público para receber notificações | O PINPDV avisa o seu sistema a cada alteração na venda — você não precisa ficar perguntando |
| Polling | Você não tem URL pública ou prefere consultar sob demanda | O seu sistema pergunta o status periodicamente |
Webhook (o PINPDV avisa você)
Cadastre uma URL de webhook no Portal do Cliente PINPDV. A partir daí, o PINPDV chama sua URL via POST automaticamente a cada mudança na venda — criação, atualização de status e conclusão — enviando o mesmo conteúdo da consulta de status. É o caminho mais eficiente: dispensa polling e respeita o rate limit naturalmente.
O payload, a ativação da URL e o uso da resposta estão detalhados em Webhook.
Polling (o seu sistema pergunta)
Se não houver webhook cadastrado, consulte periodicamente o status usando o Identificador definido na criação. Respeite o rate limit de 1 requisição por segundo.
curl --request GET \
--url 'https://api.pinpdv.com.br/pre-venda/{Identificador}' \
--header 'Authorization: Bearer {SEU_TOKEN}'Como interpretar a resposta
A estrutura segue três níveis hierárquicos — leia de fora para dentro:
| Nível | Campo | O que indica |
|---|---|---|
| 1 — Requisição | status.value | "Concluido" = o processamento foi encerrado |
| 2 — Venda | vendas[].status.value | "Realizada" = venda concluída com sucesso |
| 3 — Transações | vendas[].transacoes[].status.value | "Aprovada" = pagamento aprovado; qualquer outro valor ("Negado", "CanceladaOperador", etc.) = sem pagamento |
Onde está o pagamento aprovado?
O pagamento confirmado fica em vendas[0].transacoes[]. Se o portador tentou o cartão mais de uma vez, haverá múltiplas entradas — procure a com status.value = "Aprovada".
Uma transação negada não retorna nsu, autorizacao, bandeira nem adquirente — esses dados só existem quando o pagamento é aprovado.
Aguardando pagamento (pré-venda criada, ainda não finalizada por nenhum operador):
200 - OK
{
"id": 347260,
"identificador": "P1-0407014603",
"descricao": "Homolog P1 GN credito",
"valor": 1.20,
"status": {
"key": 0,
"value": "Aguardando"
},
"vendas": []
}Pagamento aprovado:
200 - OK
{
"id": 347260,
"identificador": "P1-0407014603",
"descricao": "Homolog P1 GN credito",
"valor": 1.20,
"status": {
"key": 2,
"value": "Concluido"
},
"vendas": [
{
"identificador": "ea77eb6b0b514b97b6ab76208b428a9b",
"valor": 1.20,
"status": { "key": 0, "value": "Realizada" },
"transacoes": [
{
"valor": 1.20,
"parcelas": 1,
"status": { "key": 0, "value": "Aprovada" },
"tipoPagamento": 2,
"dados": {
"dataHora": "2026-07-04T01:46:38.560",
"nsu": "000000368",
"autorizacao": "164550",
"bandeira": "MASTERCARD",
"adquirente": "Getnet"
}
}
],
"pinPdv": { "codigo": "283190", "nome": "Getnet 283190" }
}
]
}Sem pagamento aprovado (operador cancelou a pré-venda no Smart POS antes de concluir o pagamento):
200 - OK
{
"id": 347262,
"identificador": "P7-0407014720",
"descricao": "Homolog P7 GN cancelar",
"valor": 1.27,
"status": {
"key": 2,
"value": "Concluido"
},
"vendas": [
{
"identificador": "b52373d57dd14d4b9257fd1db0274e95",
"valor": 1.27,
"status": { "key": 8, "value": "Cancelada" },
"transacoes": [
{
"valor": 1.27,
"parcelas": 1,
"status": { "key": 78, "value": "CanceladaOperador" },
"tipoPagamento": 2,
"dados": {
"dataHora": "2026-07-04T01:47:29.296",
"nsu": null,
"autorizacao": null,
"bandeira": null,
"adquirente": null
}
}
],
"pinPdv": { "codigo": "283190", "nome": "Getnet 283190" }
}
]
}Assim como no TEF Mobile, o nível 2 (vendas[0].status.value) já denuncia a ausência de pagamento — "Cancelada" em vez de "Realizada" — mesmo com a requisição (status.value = "Concluido") tendo terminado seu processamento.
Interrompendo uma pré-venda
Enquanto o operador não tiver iniciado a transação no Smart POS, você pode cancelar a solicitação pelo sistema:
curl --request DELETE \
--url 'https://api.pinpdv.com.br/pre-venda/{Identificador}' \
--header 'Authorization: Bearer {SEU_TOKEN}'202 - AcceptedAtenção
Uma vez que o operador inicia a transação no Smart POS, a solicitação só pode ser interrompida pelo próprio app ou pelo método forçado.
Interrupção forçada
Se precisar cancelar uma pré-venda que já está em processamento no Smart POS:
curl --request DELETE \
--url 'https://api.pinpdv.com.br/pre-venda/{Identificador}?forca=true' \
--header 'Authorization: Bearer {SEU_TOKEN}'202 - AcceptedCancelamento de venda já paga
Sem endpoint de cancelamento
Não existe chamada de API para cancelar uma venda já realizada. O estorno é feito pelo operador diretamente no Smart POS, pela seção Cobranças do app PINPDV.
Envie sua impressão
O fluxo de impressão é idêntico ao dos demais módulos — via webhook (recomendado) ou envio direto pela API após confirmar a conclusão via consulta de status.
Consulte Impressão para o detalhamento completo do webhook, do endpoint PUT /venda/{vendaIdentificador}/comprovante e da impressão de QR Code.