Skip to main content

Webhooks de Transferência

Webhooks de transferência notificam sua aplicação sobre mudanças de status em transferências Pix Out em tempo real.

Estrutura do payload (envelope)

O payload segue um formato inspirado no Stripe, com um envelope contendo metadados e um objeto data com os detalhes da transferência.
{
  "id": "evt_019505a2-7c3e-7000-8a1b-3f9d2e1c4b5a",
  "type": "payout.created",
  "created": 1738958400,
  "api_version": "v2",
  "data": {
    "object": {
      "id": "txf_a1b2c3d4-5678-4e9f-b012-3456789abcde",
      "status": "pending",
      "type": "pix",
      "amount": 10100,
      "fee": 100,
      "net_amount": 10000,
      "description": "Pagamento fornecedor",
      "pix_key_type": "CPF",
      "recipient": {
        "legal_name": "J*** S****",
        "document": "***.***.***-90"
      },
      "transferred_at": null,
      "created_at": "2026-02-07T18:00:00.000Z"
    }
  }
}

Campos do envelope

CampoTipoDescrição
idstringID único do evento de webhook
typestringTipo do evento (ex: payout.created)
creatednumberTimestamp Unix (segundos) da criação do evento
api_versionstringVersão da API (v2)
data.objectobjectDados da transferência

Campos de data.object

CampoTipoDescrição
idstringID público da transferência
statusstringStatus externo da transferência
typestringTipo da transferência (ex: pix)
amountnumberValor total em centavos (valor líquido + taxa)
feenumberTaxa da operação em centavos
net_amountnumberValor líquido em centavos
descriptionstring|nullDescrição da transferência
pix_key_typestring|nullTipo da chave Pix (CPF, CNPJ, EMAIL, PHONE, EVP)
recipient.legal_namestringNome do destinatário (mascarado)
recipient.documentstringDocumento do destinatário (mascarado)
transferred_atstring|nullData/hora da efetivação (ISO 8601)
created_atstringData/hora de criação (ISO 8601)
Dados sensíveis como nome e documento do destinatário são mascarados no webhook por segurança.

Tipos de evento

EventoStatusDescrição
payout.createdpendingTransferência criada, aguardando processamento
payout.in_analysisin_analysisEm análise pelo provedor
payout.processingprocessingSendo processada pelo provedor
payout.transferredpaidTransferência concluída com sucesso
payout.failederrorFalha no processamento (reportar ao suporte para reconciliação; pode ser atualizado para cancelled ou paid se o envio tiver sido efetivado)
payout.rejectedrejectedRejeitada pelo provedor
payout.canceledcancelledCancelada ou estornada

Boas práticas

  1. Responder 200 OK rapidamente - retorne o status antes de processar o evento
  2. Processar de forma assíncrona - use filas ou workers para lógica pesada
  3. Idempotência - deduplicar por id do evento + data.object.id da transferência
  4. Registrar logs - inclua id e type do evento nos logs para rastreabilidade
Evite polling contínuo. Use webhooks como fonte principal de atualização e GET /v2/transfers/{id} como fallback para reconciliação.