

O ciclo do acúmulo
1
Receba o evento
Os eventos de pedido chegam por webhook (push na URL de notificação do app) ou por polling (
GET /merchant/v3/events:polling). Nos dois canais o evento é só notificação: um envelope, sem dados de fidelidade.eventTypevem em MAIÚSCULAS (CONCLUDED,CANCELLED, …), e a grafia do campo de URL éorderURL.- Deduplique por
eventId: o mesmo evento pode chegar mais de uma vez. CONCLUDEDé o gatilho de acúmulo;CANCELLEDé o gatilho de estorno do acúmulo daquele pedido, nunca um mecanismo de débito.
2
Busque o pedido
Com o token de scope No pedido de um cliente vinculado ao seu programa vem o bloco
od.all, busque o pedido pela orderURL (ou GET /merchant/v3/orders/{orderId}).loyalty:object
Só presente quando o cliente está vinculado ao seu programa.
Privacidade entre operadores: o bloco
loyalty só aparece para o app cujo programa o cliente aderiu. Cada app vê apenas o próprio programa. Sem vínculo, o pedido não tem a chave loyalty; e o redemption só chega ao app que foi debitado.3
Calcule a base: ela é sua
A DeliveryVip não manda valor calculado: a base de acúmulo é uma regra do seu programa, extraída dos totais do próprio pedido.
orderAmount(o total) inclui frete e taxas;itemsPrice − discounté a base só de itens, sem frete.
redemption.status muda a conta:Exemplo: itens de 40 com resgate de 25 estornado. Os totais indicam 15;
15 + 25 = 40 é o que o cliente realmente pagou.4
Estorne o acúmulo no CANCELLED
Ao receber
CANCELLED de um pedido sobre o qual você já acumulou, desfaça o acúmulo no seu ledger. O estorno do resgate (devolução do saldo debitado) é responsabilidade da DeliveryVip via reversal: o CANCELLED cuida só do acúmulo que você concedeu.Webhook: regras de entrega
Se usar webhook como canal (recomendado), valem as regras da documentação de webhooks:- assinatura
X-App-Signature: HMAC-SHA256 do corpo bruto com o Client Secret do app, a mesma verificação das chamadas do contrato; - o
X-App-Iddos webhooks é um identificador fixo da plataforma, não oclient_iddo seu app; - qualquer
2xxé sucesso; apenas408e429são retentados (3 tentativas no total); - qualquer outro não-2xx, inclusive
5xx, é recusa definitiva (fica para reenvio manual); - 10 falhas consecutivas suspendem as entregas do app.
Responda
2xx rápido e processe o acúmulo de forma assíncrona. Se a busca do pedido falhar, não marque o eventId como processado: o polling (enquanto você não enviar o acknowledgment, por até 24 horas) ou um reenvio manual traz o evento de volta.