

Ativação do programa com verificação síncrona
Config push
dv.loyalty e a extensão de fidelidade declarada no app.
string
obrigatório
O UUID da loja que instalou o seu app.
object
obrigatório
object
obrigatório
Resposta (200)
PUT é last-write-wins: a configuração é única por loja (por app) e cada push substitui a anterior por inteiro. Um campo omitido volta ao padrão; um redemptionLimits omitido remove os limites.
Trocando de programa (program.id diferente)
Os vínculos dos clientes são atrelados ao programa (program.id), não à configuração da loja. Um PUT com um program.id diferente encerra a oferta do programa antigo naquela loja e começa um novo do zero:
- Os clientes vinculados ao programa antigo voltam ao estado “elegível” naquela loja e precisam aderir de novo ao programa novo (novo opt-in, com novo consentimento).
- Os vínculos antigos não são apagados: continuam válidos onde o programa antigo seguir configurado (ex.: outra loja da mesma rede) e permanecem como trilha de consentimento. O histórico de resgates também permanece.
- Mantendo o mesmo
program.id, o push é uma atualização transparente: os vínculos existentes continuam valendo na hora.
Limites de resgate (redemptionLimits)
Por padrão o cliente pode resgatar todo o saldo que couber no pedido. Se o seu programa tem regras comerciais, como “não vale resgate abaixo de R$ 5” ou “no máximo metade dos itens”, declare-as em capabilities.redemptionLimits:
min e max) é um objeto com type e value:
Quem aplica os limites é a DeliveryVip, no checkout, antes de chamar a sua API: o
amount que chega em POST /v1/loyalty/redemptions já respeita o que você declarou.
Omitir é declarar “sem limite”
Você pode omitir o objeto inteiro, só omin ou só o max. Ausência não é um valor a adivinhar, e não existe default conservador: um programa sem redemptionLimits permite resgatar até 100% da base. Isso é compatibilidade deliberada: nenhuma configuração existente mudou de comportamento com a chegada do campo.
A base do percentual são os ITENS, não o total
percent incide sobre a base resgatável: o subtotal dos itens menos os demais descontos de carrinho. Frete e taxas nunca são resgatáveis. O valor calculado é arredondado para baixo, no centavo.
Isso é relevante se as suas próprias regras forem escritas sobre o total do pedido: nesse caso o teto calculado pela DeliveryVip pode ser menor que o seu, nunca maior. A consequência é segura por construção (a plataforma nunca autoriza um resgate que você recusaria), mas vale conferir se a sua expectativa é essa.
O mínimo decide se pode, não quanto
Ummin nunca eleva o valor resgatado. Ele só decide se o resgate é possível: um valor abaixo do mínimo é rejeitado com mensagem ao cliente, nunca ajustado em silêncio para o mínimo.
Se as suas regras variam por cliente (tier, segmento, acordo individual), o mesmo objeto pode ser devolvido na consulta de saldo, e ali ele substitui o do programa. Regra única para todos pertence aqui, no programa.
A verificação síncrona (ping)
Antes de persistir qualquer coisa, a DeliveryVip faz umGET {api_base_url}/v1/loyalty/ping assinado no seu endpoint, dentro da própria requisição do PUT:
- Seu endpoint deve validar a assinatura (HMAC da string vazia) e responder
204. Qualquer2xxé aceito. - Se o ping falhar (timeout, erro de conexão, não-2xx ou assinatura que o seu lado rejeitou), nada é gravado e o
PUTresponde422.
Respostas
Os erros vêm no formato:
Resposta (422)
title, separadas por |.
Desativando o programa
DELETE é uma declaração de estado (“esta loja não tem mais programa”) e é idempotente: responde 204 mesmo que não exista configuração.
O
DELETE remove só a configuração da loja: os vínculos de clientes e o histórico de resgates são preservados. Um novo PUT com o mesmo programa reativa a loja e os clientes já vinculados voltam a vê-lo sem precisar aderir de novo. Quem apaga vínculos e histórico é a remoção da extensão do app, que cascateia sobre todas as lojas.