Documentação de Webhooks: eventos e payloads

Integrações e WebhooksAtualizado em 2026-06-26

Esta é a referência técnica dos webhooks da Cloudfy. Sempre que algo acontece em um pedido (PIX gerado, pagamento aprovado, reembolso, etc.), a Cloudfy envia uma requisição POST para a URL que você cadastrou em Webhooks, com um corpo JSON no formato abaixo. Para cadastrar a URL, veja Como configurar um webhook?.

Baixar a documentação completa (PDF)

Formato do evento

Todo evento chega com dois campos no nível raiz: type (o nome do evento) e payload (os dados do pedido).

{
  "type": "PIX_APPROVED",
  "payload": { ... }
}

Eventos disponíveis

Evento (type)Quando dispara
PIX_GENERATEDPIX gerado, aguardando pagamento (status PENDING).
PIX_APPROVEDPIX pago e aprovado (status APPROVED).
PIX_EXPIREDPIX expirou sem pagamento.
BOLETO_GENERATEDBoleto gerado, aguardando pagamento (status PENDING).
BOLETO_APPROVEDBoleto pago e aprovado (status APPROVED).
CREDIT_CARD_APPROVEDPagamento no cartão aprovado (status APPROVED).
CREDIT_CARD_REFUSEDPagamento no cartão recusado (status REFUSED).
ORDER_REFUNDEDPedido reembolsado (status REFUNDED).
ORDER_CHARGED_BACKPedido sofreu chargeback (status CHARGED_BACK).
CHECKOUT_ABANDONEDCheckout abandonado — o cliente preencheu os dados mas não finalizou o pagamento.

Campos do payload (eventos de pedido)

Os eventos de PIX, boleto e cartão compartilham a mesma estrutura de payload:

CampoDescrição
_idID do pedido.
valueValor do pedido.
items[]Lista de itens, cada um com product (name, description, img.url) e quantity.
paymentMethodMétodo de pagamento: PIX, BOLETO ou CREDIT_CARD.
payerNameNome de quem pagou.
payerCpfCPF de quem pagou.
payerEmailE-mail de quem pagou.
phoneTelefone de quem pagou.
installmentsNúmero de parcelas.
statusStatus do pedido: PENDING, APPROVED, REFUSED, REFUNDED ou CHARGED_BACK.
storeID da loja.
createdAt / updatedAtDatas de criação e atualização do pedido.
orderPendingUrlLink do pedido pendente.

Campos específicos do PIX

Presentes nos eventos PIX_GENERATED, PIX_APPROVED e PIX_EXPIRED:

  • qrCode — código copia e cola do PIX.
  • base64QrCode — imagem do QR Code em base64.
  • pixDueDate — validade do PIX.

Campos específicos do boleto

Presentes nos eventos BOLETO_GENERATED e BOLETO_APPROVED:

  • barCode — código de barras.
  • digitableLine — linha digitável.
  • externalResourceUrl — link para acessar o boleto.
  • boletoDueDate — vencimento do boleto.

Objeto shipping (entrega)

Quando há endereço de entrega, o payload inclui o objeto shipping com: value, street, neighborhood, city, state, number, cep, type, complement, selectedShippingId, createdAt e updatedAt.

Parâmetros de rastreamento

A Cloudfy captura automaticamente os parâmetros enviados na URL do checkout e os repassa no payload do webhook.

Parâmetro na URLCampo no payload
utm_sourceutmSource
utm_campaignutmCampaign
utm_mediumutmMedium
utm_contentutmContent
utm_termutmTerm
click_id (Kwai Ads)kwaiClickId
ttclid (TikTok Ads)tiktokClickId

Também podem ser enviados xcod e subIds.

Campos opcionais

Os campos abaixo são opcionais e podem não estar presentes, vir como null ou como string vazia, dependendo de como o checkout foi acessado:

utmSource, utmCampaign, utmMedium, utmContent, utmTerm, xcod, subIds, kwaiClickId, tiktokClickId, shipping e orderPendingUrl.

Exemplo: PIX_APPROVED

{
  "type": "PIX_APPROVED",
  "payload": {
    "_id": "673a3dca2b11ddfb67e3315c",
    "value": 15,
    "items": [
      { "product": { "name": "Teclado gamer", "description": "lorem", "img": { "url": "image do produto" } }, "quantity": 1 }
    ],
    "paymentMethod": "PIX",
    "payerName": "Sérgio Antonio",
    "payerCpf": "087.001.240-10",
    "installments": 1,
    "status": "APPROVED",
    "store": "66f5572e4b28b122deaa9840",
    "qrCode": "pixCopiaECola",
    "base64QrCode": "imagemDoQrCodeEmBase64",
    "pixDueDate": "2024-11-17T19:12:34.724Z",
    "phone": "(85) 98902-8127",
    "payerEmail": "sergio@gmail.com",
    "shipping": { "value": 14.9, "number": 123, "type": "FIXED" },
    "orderPendingUrl": "https://..."
  }
}

Evento CHECKOUT_ABANDONED

Esse evento tem um payload diferente — todos os campos são opcionais (podem vir como undefined):

{
  "type": "CHECKOUT_ABANDONED",
  "payload": {
    "storeId": "66f5572e4b28b122deaa9840",
    "document": "632.444.900-93",
    "email": "joao@gmail.com",
    "fullName": "Joao Silva",
    "phone": "(11) 1 1111-1111"
  }
}
Sempre responda com status 200 aos webhooks e trate cada evento de forma idempotente — em casos raros o mesmo evento pode chegar mais de uma vez.