Introdução
A integração com PDV permite que sistemas de ponto de venda utilizem os recursos de fidelidade da BonifiQ diretamente no fluxo de compra do consumidor utilizando nossas APIs. Esta documentação cobre todos os endpoints e fluxos necessários para uma integração completa.https://api.bonifiq.com.br/v1/pvt/POSConsulte também a documentação interativa SwaggerAutenticação
Saiba mais como utilizar a autenticação (Basic Authentication) com a BonifiQ acessando esse linkFluxo de Resgate de Recompensas
Visão Geral
O diagrama abaixo ilustra o fluxo completo de resgate de uma recompensa no PDV:
1. Consulta de Recompensas
2. Validação (Opcional)
3. Resgate e Conclusão
Consulta de Recompensas
Na BonifiQ é possível que sejam configuradas uma ou mais recompensas. As recompensas podem ser aplicadas aos pedidos, oferecendo um desconto na compra do cliente. Alguns exemplos: “desconto de 10% por 1000 pontos”, “desconto de R$ 10 por 100 pontos”, “cashback de R$ 10,00”, etc Para realizar essa consulta, pode-se chamar o endpoint POS/rewards/available. No corpo da chamada, deve-se informar o identificador do usuário (geralmente o CPF ou CNPJ). Esse endpoint retorna uma lista de Recompensas disponíveis para este consumidor. As recompensas podem ser de 2 tipos:- Desconto fixo (ex: R$ 10,00) ou Desconto percentual (ex: 10%)
- Cashback (que também pode ser um desconto)
Mockups de Exemplo
Os mockups abaixo ilustram um fluxo comum de consulta de recompensas:
- O primeiro passo é a consulta das recompensas. É feita chamada para o endpoint, informando o documento do consumidor (apenas números) e o valor atual do pedido.

- A primeira possibilidade de retorno é uma lista de recompensas disponíveis de Desconto. A imagem detalha quais campos do retorno são utilizados na exibição de cada elemento. Esse cenário não contempla uso de Cashback. É importante notar que a última recompensa está inativa (CanUse=false) pois o consumidor não possui pontos suficientes. Ao clicar em Escolher o fluxo pode continuar.

- A segunda possibilidade de retorno é o Cashback. É importante notar que é possível que sejam retornados Cashback e Descontos ao mesmo tempo. Ao clicar em Escolher, deve-se exibir o seletor de valor (vide abaixo).

- Quando se deseja utilizar Cashback é possível que seja utilizado apenas parte do mesmo. No exemplo acima podemos observar: a) O valor total de cashback que o cliente tem é R$100,00 b) O máximo de cashback que ele pode utilizar na compra atual é R$10,00 (devido à regra descrita em Requirements) c) O cliente pode escolher qualquer valor entre R$1,00 e R$10,00 Ao clicar em Confirmar o fluxo pode continuar normalmente.

- Por fim, a terceira possibilidade desse fluxo é de que não há recompensas disponíveis para utilização.
API: Consultar Recompensas Disponíveis
Request Body
Request Body
null ou 0.Campos de Resposta
Campos de Resposta
Campos de Resposta Importantes
false, não há recompensas disponíveis. O fluxo de recompensas deve ser ignorado.true, o fluxo deve seguir para a validação do cliente (envio de código PIN). Se false, a validação pode ser pulada.true, existe uma recompensa de Cashback configurada.Campos de Cada Recompensa
0- Desconto Percentual (ex: 15% off)1- Desconto em Valor (ex: R$10,00)3- Cashback (ex: R$10,00 em compras acima de R$30,00)4- Recompensa Customizada (ex: Brinde)
- Desconto Percentual: Valor do percentual (ex:
10.00para 10%) - Desconto em Valor: Valor em reais (ex:
10.00para R$10,00) - Cashback: Valor de cada ponto em reais
true, o cliente pode usar esta recompensa. Se false, exiba a recompensa como desabilitada para que o cliente saiba o que pode conquistar no futuro.true, esta é uma recompensa de cashback e o cliente pode escolher o valor a utilizar.true, a recompensa pode ser usada junto com outros descontos. Se false, a recompensa só pode ser usada se não houver outros descontos no pedido.Validação do Cliente (Opcional)
Essa é uma etapa de segurança, que visa reduzir chances de mal-uso dos benefícios. Sua aplicação é opcional e configurável dentro da BonifiQ.ShouldValidateCustomer retornado pela chamada /POS/rewards/available:- Se
true: o fluxo de validação deve acontecer. - Se
false: o fluxo de validação não deve acontecer (deve ser pulado) e o PDV deve ir direto para a etapa de resgate da recompensa.

API: Enviar Challenge
Path Parameters
Request Body e Resposta
Request Body e Resposta
Campos de Resposta
true, o challenge foi enviado com sucesso.true, o código foi enviado por SMS.true, o código foi enviado por e-mail.true e Success=false, é necessário informar o telefone do cliente em uma nova requisição.true e Success=false, é necessário informar o e-mail do cliente em uma nova requisição.API: Validar Challenge
Path Parameters
Request Body e Resposta
Request Body e Resposta
Resgate da Recompensa
Agora, ao finalizar a compra, o PDV chama o endpoint de resgate de recompensa confirmando o resgate. Deve-se utilizar o endpoint POS/rewards//redeem. Com a resposta positiva da API, o PDV deve então aplicar o respectivo desconto no pedido.API: Resgatar Recompensa
Path Parameters
/rewards/available).Request Body
Request Body
maxCashbackForCurrentPurchase.Value ou Points, não ambos.{rewardId}-{customerId}-{orderId}-{value}Exemplo: 3-12345678900-PDV001-15.00Campos de Resposta
Campos de Resposta
Coupon quando o pedido for cadastrado na BonifiQ. Isso vincula o resgate ao pedido.Cadastro de Pedidos
Após a conclusão de uma venda, esta deve ser enviada à BonifiQ para que os pontos sejam creditados ao cliente.Cadastrar Pedido
Request Body
Request Body
IsCompleted=true.IsCancelledOrReturned=true.true, o pedido está finalizado e os pontos serão concedidos ao cliente.true, o pedido foi cancelado ou devolvido.ExternalCode retornado no resgate. Se não utilizou recompensa BonifiQ mas usou outro cupom, informe o código do cupom.Exemplos de Requisição e Resposta
Exemplos de Requisição e Resposta
Cancelar Pedido
- Marca o pedido como Cancelado (refletido nos relatórios)
- Estorna os pontos concedidos ao cliente (se houver)
- Estorna as recompensas utilizadas (se houver)
Path Parameters
OriginalId do pedido que foi enviado quando o pedido foi criado.Request Body e Resposta
Request Body e Resposta
Cancelamento Parcial de Pedido
Path Parameters
OriginalId do pedido.Request Body e Resposta
Request Body e Resposta
Cancelamento de Recompensas
Quando um resgate é realizado, os pontos correspondentes são debitados do cliente. Se a venda ainda não foi concluída, é possível cancelar o resgate - devolvendo os pontos (ou cashback) de volta ao cliente. Existem duas formas de cancelar uma recompensa resgatada:Cancelar por ID da Recompensa
Path Parameters
RewardId retornado no endpoint de resgate.Exemplo de Requisição e Resposta
Exemplo de Requisição e Resposta
Cancelar por OriginalKey
Request Body e Resposta
Request Body e Resposta
OriginalKey utilizada no momento do resgate.Tratamento de Erros
Todos os endpoints retornam erros no seguinte formato:Códigos de Erro Comuns
| Cenário | Ação Recomendada |
|---|---|
| Cliente não encontrado | Verificar se o documento foi digitado corretamente |
| Pontos insuficientes | Informar ao cliente que ele não tem pontos suficientes |
| Valor de compra abaixo do mínimo | Informar o valor mínimo necessário |
| Challenge expirado | Solicitar novo código ao cliente |
| Código PIN inválido | Permitir nova tentativa ou cancelar |
| Recompensa já resgatada (idempotência) | A operação já foi realizada, prosseguir |
Boas Práticas
Sempre use OriginalKey para idempotência
Sempre use OriginalKey para idempotência
OriginalKey com um valor único e consistente para evitar resgates ou cancelamentos duplicados.Vincule o resgate ao pedido
Vincule o resgate ao pedido
ExternalCode retornado no resgate como valor do campo Coupon ao cadastrar o pedido. Isso permite rastreamento completo.Não inclua descontos no OrderTotal
Não inclua descontos no OrderTotal
OrderTotal deve refletir apenas o valor efetivamente pago pelo cliente, sem frete, descontos, cupons ou promoções. Isso garante o cálculo correto de pontos.Trate a validação como opcional
Trate a validação como opcional
shouldValidateCustomer antes de iniciar o fluxo de challenge. Se false, pule direto para o resgate.Exiba recompensas indisponíveis como desabilitadas
Exiba recompensas indisponíveis como desabilitadas
canUse=false, exiba a recompensa ao cliente (em estado desabilitado). Isso o motiva a acumular mais pontos para futuras compras.Projeto de Referência
Disponibilizamos um repositório público no GitHub com um PDV mockado que demonstra a integração completa com a BonifiQ. Este projeto pode ser usado como referência para auxiliar no desenvolvimento da sua integração.PDV BonifiQ Integration Example
- Implementação completa do fluxo de resgate de recompensas
- Exemplos de tratamento de erros
- Integração com autenticação Basic Auth
- Interface de usuário mockada para testes
Checklist de Implementação
Use esta lista para acompanhar seu progresso na integração:Configuração Inicial
Configuração Inicial
- Obter credenciais de API (usuário e senha)
- Configurar autenticação Basic Auth no sistema
- Testar conexão com a API em ambiente de sandbox
Fluxo de Recompensas
Fluxo de Recompensas
- Implementar consulta de recompensas (
/rewards/available) - Exibir lista de recompensas disponíveis ao vendedor
- Tratar cenário “sem recompensas disponíveis”
- Implementar seleção de valor para Cashback
- Implementar validação via challenge (se aplicável)
- Implementar resgate de recompensa (
/rewards/{id}/redeem) - Aplicar desconto no pedido após resgate
Gestão de Pedidos
Gestão de Pedidos
- Implementar cadastro de pedidos (
/orders) - Enviar
ExternalCodeno campoCouponquando houver resgate - Implementar cancelamento total de pedidos
- Implementar cancelamento parcial (se necessário)
Tratamento de Erros
Tratamento de Erros
- Tratar erros de autenticação
- Tratar erros de cliente não encontrado
- Tratar erros de pontos insuficientes
- Exibir mensagens amigáveis ao usuário
Testes e Validação
Testes e Validação
- Testar fluxo completo de resgate em sandbox
- Testar cancelamento de recompensa
- Testar cadastro de pedido com e sem recompensa
- Validar idempotência com
OriginalKey - Testar em produção com valores reais
Ambiente de Testes (Sandbox)
Para desenvolvimento e testes, utilize o mesmo endpoint de produção, porém com credenciais específicas de sandbox, fornecidas pela BonifiQ.https://api.bonifiq.com.br/v1/pvt/POSEntre em contato com o suporte para obter credenciais de teste.Limites da API (Rate Limits)
Para garantir a estabilidade do serviço, a API possui limites de requisições:| Tipo de Limite | Valor | Período |
|---|---|---|
| Requisições por segundo | 10 | Por segundo |
| Requisições por minuto | 300 | Por minuto |
| Requisições por hora | 10.000 | Por hora |
429 Too Many Requests. Implemente um mecanismo de retry com backoff exponencial para lidar com esses casos.Glossário
Recompensa
Recompensa
Pontos
Pontos
Cashback
Cashback
Challenge
Challenge
OriginalKey
OriginalKey
ExternalCode
ExternalCode
Coupon ao cadastrar o pedido, permitindo vincular o resgate ao pedido final.PDV (Point of Sale)
PDV (Point of Sale)
OrderTotal
OrderTotal
FAQ - Perguntas Frequentes
O que acontece se eu enviar o mesmo pedido duas vezes?
O que acontece se eu enviar o mesmo pedido duas vezes?
OriginalId, a BonifiQ atualizará o pedido já existente na base.Posso usar mais de uma recompensa por compra?
Posso usar mais de uma recompensa por compra?
O PIN será enviado por e-mail, WhatsApp ou SMS?
O PIN será enviado por e-mail, WhatsApp ou SMS?
Quanto tempo o código PIN do challenge é válido?
Quanto tempo o código PIN do challenge é válido?
O cliente precisa estar cadastrado previamente na BonifiQ?
O cliente precisa estar cadastrado previamente na BonifiQ?
Como sei se devo pedir validação por challenge?
Como sei se devo pedir validação por challenge?
ShouldValidateCustomer na resposta do endpoint /rewards/available. Se for true, você deve executar o fluxo de challenge antes do resgate. Se for false, pode pular direto para o resgate.Posso cancelar uma recompensa já resgatada?
Posso cancelar uma recompensa já resgatada?
DELETE /rewards/{id}) ou envie a OriginalKey para cancelar. Os pontos/cashback serão devolvidos ao cliente.O que é a OriginalKey e como devo gerá-la?
O que é a OriginalKey e como devo gerá-la?
OriginalKey é uma chave única que identifica uma operação específica. Recomendamos o formato: {rewardId}-{customerId}-{orderId}-{timestamp}. Ela garante que mesmo se houver falha de rede e você reenviar a requisição, a operação será executada apenas uma vez.Por que meu OrderTotal deve excluir descontos?
Por que meu OrderTotal deve excluir descontos?
OrderTotal representa o valor real da compra para cálculo de pontos. Se incluir descontos, o cliente receberia menos pontos do que deveria. Envie sempre o valor dos produtos antes de qualquer desconto, cupom ou promoção.Preciso enviar pedidos que não usaram benefícios da BonifiQ?
Preciso enviar pedidos que não usaram benefícios da BonifiQ?
Como funciona o cancelamento parcial de pedido?
Como funciona o cancelamento parcial de pedido?
Suporte
Em caso de dúvidas ou problemas na integração:- Documentação Swagger: API Docs
- Central de Ajuda: suporte.bonifiq.com.br
- E-mail: suporte@bonifiq.com.br