event de topo permanece transaction; o nome concreto do evento fica em data.event_type.
Exemplo de payload entregue
data.customer traz quem comprou: name, email e phone (o phone pode vir null). O documento
do comprador nunca é enviado. O bloco vem null quando a transação não tem comprador resolvível.
data.products traz os itens comprados, na mesma forma que o endpoint de detalhe da transação
devolve: o id público do item, title, unit_price, quantity, tangible e kind. A lista vem
vazia quando a transação não tem itens.
unit_price é inteiro, na menor unidade da moeda, igual ao amount — 10000 numa venda em BRL é
R$ 100,00. tangible diz se o item exige envio. kind é product, order_bump ou upsell; brinde
chega como product com preço 0, e não como um tipo próprio.
data.attribution traz de onde a venda veio: UTMs de campanha, click IDs de anúncio (fbc, fbp,
gclid, ttclid), o par de afiliado (src, sck) e as URLs de checkout e origem. Cada chave vem
null quando ausente, e o bloco inteiro vem null em transações criadas pela API — a atribuição
vive na sessão de checkout, que essas vendas não têm.
data.store diz em qual loja a venda aconteceu: o id público da vitrine e o nome dela. É o que
permite separar as marcas quando a mesma conta tem mais de uma e todas apontam para o mesmo endpoint.
O bloco vem null — e sempre presente, nunca omitido — quando a venda não tem vitrine registrada:
cobrança pela API, cobrança manual e split. Vendas anteriores à chegada das vitrines também chegam
null, então leia null como “sem vitrine registrada”, e não como prova de que a venda não veio de
uma.
Esses blocos são aditivos e foram introduzidos juntos. Trate-os como opcionais: mantenha seu
handler funcionando quando algum faltar, e não condicione a liberação do pedido à presença deles.
data.informations devolve o array informations que você enviou ao criar a transação via API — use-o para reconciliar o evento com os seus próprios registros. Só aparece quando você enviou entradas customizadas na criação; transações sem elas (ou criadas por checkout links) omitem o campo.
Resposta de ACK
Eventos emitidos hoje
transaction.createdtransaction.pendingtransaction.paidtransaction.cancelledtransaction.refundedtransaction.partially_refundedtransaction.chargedbacktransaction.three_ds_requiredtransaction.med— só por assinatura explícitatransaction.pre_chargedback— só por assinatura explícita
transaction.refunded. Assine no painel (Configurações → Webhooks) quando quiser
distinguir um MED do PIX ou um pré-chargeback de um estorno comum.
Quando a reversão é um MED ou um pré-chargeback, a entrega de transaction.refunded dela leva
data.status como med ou pre_chargedback, e não refunded. O nome do evento é estável; o
campo de status é o mais específico.
Erro comum de ingestão
id do evento no topo, não pelo ID da transaction, porque a mesma transaction pode emitir mais de um evento ao longo do tempo.
Guia de mapeamento
- Use
transaction.paidpara liberar bens ou serviços. - Mantenha o pedido aberto em
transaction.pending. - Para
method: "voucher",transaction.pendingtambém pode carregar instruções de pagamento emdata.voucher. Exibaurl,digitable_line,barcodeouinstructionse continue aguardandotransaction.paid. - Use eventos de reembolso e chargeback para fluxos de financeiro e suporte.
- Encaminhe
transaction.three_ds_requiredde volta para o seu fluxo de challenge de cartão.

