Skip to content

Payloads dos Webhooks

Exemplos dos payloads enviados para cada tipo de evento. Todos os webhooks sao enviados como HTTP POST com Content-Type: application/json.

Headers de seguranca

Cada notificacao inclui os headers X-Owem-Signature (HMAC-SHA256), X-Owem-Timestamp, X-Owem-Event-Id e X-Owem-Event-Type. Consulte Webhooks — Visao Geral para detalhes sobre validacao.


Referencia de Status

Nem todos os eventos significam que a transacao esta concluida. Use a tabela abaixo para saber quando o dinheiro foi efetivamente liquidado.

EventoStatusSignificadoDinheiro liquidado?
pix.charge.createdcreatedQR code gerado ou cash-in iniciado. Aguardando pagamento.Nao — apenas criado
pix.charge.paidpaidPIX recebido e liquidado em conta. Saldo atualizado, taxa cobrada.Sim
pix.charge.expiredexpiredQR code expirou sem pagamento.N/A
pix.charge.cancelledcancelledQR code cancelado antes de pagamento.N/A
pix.payout.processingprocessingPIX enviado, aguardando confirmacao do destino. Saldo reservado (hold).Nao — pode reverter
pix.payout.confirmedsettledPIX enviado confirmado pelo destino. Debito definitivo.Sim
pix.payout.failedrejectedPIX enviado rejeitado pelo destino. Hold liberado, saldo restaurado.Nao
pix.payout.returnedreturnedPIX enviado devolvido apos liquidacao.Sim (reverso)
pix.refund.requestedrequestedDevolucao PIX solicitada (MED ou voluntaria). Reserva criada.Parcial
pix.refund.completedcompletedDevolucao PIX concluida e liquidada. Debito definitivo.Sim
pix.return.receivedreceivedDevolucao PIX recebida (credito na conta).Sim
webhook.testtestEvento de teste disparado manualmente.N/A

Regra: Para reconciliacao financeira, so considere definitivos os status paid, settled, received ou completed. Todos os outros sao intermediarios.


Campos comuns

Todos os payloads de webhook incluem estes campos:

CampoTipoDescricao
event_typestringTipo do evento que disparou o webhook (ex: pix.charge.paid)
statusstringStatus da operacao — consulte a Referencia de Status
account_idintegerNumero da sua conta na Owem
entity_idstring (UUID)Identificador da entidade Owem

Valores monetarios: Todos os valores sao em subcentavos (1 BRL = 10.000 subcentavos). Para converter para reais: valor / 10000. Exemplo: 300000 / 10000 = R$ 30,00.


pix.charge.paid

Enviado quando um PIX e recebido e liquidado na conta. Este e o evento que confirma que o dinheiro entrou.

Exemplo — vinculado a QR code

json
{
  "event_type": "pix.charge.paid",
  "status": "paid",
  "account_id": 10014,
  "amount": 300000,
  "fee_amount": 400,
  "end_to_end_id": "E9040088820260402095758709999671",
  "entity_id": "26a48541-edce-4581-8c6e-564e7f2e6cd7",
  "tx_id": "u5f26sfyrq4plkw7tjwa",
  "counterparty_name": "MARIA SANTOS",
  "external_id": "order-9876",
  "paid_at": "2026-04-02T09:58:05Z"
}

Exemplo — transferencia direta (sem QR)

json
{
  "event_type": "pix.charge.paid",
  "status": "paid",
  "account_id": 10014,
  "amount": 300000,
  "fee_amount": 400,
  "end_to_end_id": "E9040088820260402095758709999671",
  "entity_id": "26a48541-edce-4581-8c6e-564e7f2e6cd7",
  "tx_id": null,
  "counterparty_name": "JOAO SILVA",
  "external_id": null,
  "paid_at": "2026-04-02T10:15:22Z"
}
CampoTipoDescricao
event_typestringSempre pix.charge.paid
statusstringSempre paid
account_idintegerNumero da conta que recebeu o PIX
amountintegerValor recebido em subcentavos. 300000 = R$ 30,00
fee_amountintegerTarifa cobrada em subcentavos. 400 = R$ 0,04
end_to_end_idstringIdentificador E2E do BACEN (unico por transacao PIX)
entity_idstring (UUID)Identificador da entidade Owem
tx_idstring ou nullID da transacao. Presente quando vinculado a um QR code. null para transferencias diretas
counterparty_namestring ou nullNome do pagador (remetente)
external_idstring ou nullSeu identificador externo. Presente quando o QR code foi criado via API com external_id. null para transferencias diretas ou QR sem external_id
qr_code_idstring ou nullID do QR code vinculado. null para transferencias diretas
paid_atstring (ISO 8601)Data/hora da liquidacao (UTC)

pix.charge.expired

Disparado automaticamente quando QR code expira (worker a cada 5 min).

json
{
  "event_type": "pix.charge.expired",
  "status": "expired",
  "account_id": 10014,
  "entity_id": "26a48541-edce-4581-8c6e-564e7f2e6cd7",
  "tx_id": "abc123def456ghi789",
  "external_id": "order-9876"
}
CampoTipoDescricao
event_typestringSempre pix.charge.expired
statusstringSempre expired
tx_idstringID da cobranca/QR code
external_idstring ou nullSeu identificador externo

pix.charge.cancelled

Planejado

Este evento esta planejado mas ainda nao esta implementado.


pix.charge.created

Enviado quando um QR code e gerado ou um cash-in e iniciado. Nenhum movimento financeiro ocorreu.

json
{
  "event_type": "pix.charge.created",
  "status": "created",
  "account_id": 10014,
  "amount": 500000,
  "entity_id": "26a48541-edce-4581-8c6e-564e7f2e6cd7",
  "tx_id": "abc123def456ghi789",
  "external_id": "order-9876"
}
CampoTipoDescricao
event_typestringSempre pix.charge.created
statusstringSempre created
amountintegerValor esperado em subcentavos
tx_idstringID da cobranca/QR code
external_idstring ou nullSeu identificador externo, retornado tal como enviado. null se nao informado ou QR gerado pelo portal

pix.payout.confirmed

Enviado quando um PIX enviado e confirmado pela instituicao destino. Debito definitivo.

json
{
  "event_type": "pix.payout.confirmed",
  "status": "settled",
  "account_id": 10014,
  "amount": 500000,
  "fee_amount": 200,
  "end_to_end_id": "E3783905920260402101500000001",
  "entity_id": "26a48541-edce-4581-8c6e-564e7f2e6cd7",
  "transaction_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "external_id": "payment-456",
  "pix_key": "destinatario@email.com",
  "description": "Pagamento fornecedor",
  "recipient": {
    "name": "EMPRESA DESTINO LTDA",
    "document": "12345678000199",
    "ispb": "60701190",
    "account": "12345678",
    "agency": "0001",
    "institution_name": "Itau Unibanco S.A."
  }
}
CampoTipoDescricao
event_typestringSempre pix.payout.confirmed
statusstringSempre settled — debito definitivo
amountintegerValor enviado em subcentavos
fee_amountintegerTarifa cobrada em subcentavos
end_to_end_idstringIdentificador E2E do BACEN
transaction_idstring (UUID)Identificador unico da transacao
external_idstring ou nullSeu identificador externo
pix_keystringChave PIX do destinatario
descriptionstring ou nullDescricao informada pelo remetente
recipientobjectDados bancarios do destinatario (resolvidos via DICT)
recipient.namestring ou nullNome do titular da conta destino
recipient.documentstring ou nullCPF/CNPJ do destinatario (somente digitos)
recipient.ispbstring ou nullISPB da instituicao destino
recipient.accountstring ou nullNumero da conta destino
recipient.agencystring ou nullAgencia da conta destino
recipient.institution_namestring ou nullNome da instituicao destino

pix.payout.processing

Enviado quando um PIX enviado esta sendo processado. O saldo esta reservado (hold) mas nao e definitivo.

json
{
  "event_type": "pix.payout.processing",
  "status": "processing",
  "account_id": 10014,
  "amount": 500000,
  "fee_amount": 0,
  "end_to_end_id": "E3783905920260402101500000001",
  "entity_id": "26a48541-edce-4581-8c6e-564e7f2e6cd7",
  "transaction_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "external_id": "payment-456",
  "pix_key": "destinatario@email.com",
  "description": "Pagamento fornecedor",
  "recipient": {
    "name": "EMPRESA DESTINO LTDA",
    "document": "12345678000199",
    "ispb": "60701190",
    "account": "12345678",
    "agency": "0001",
    "institution_name": "Itau Unibanco S.A."
  }
}
CampoTipoDescricao
event_typestringSempre pix.payout.processing
statusstringSempre processing — saldo reservado, pode reverter
amountintegerValor em subcentavos
fee_amountintegerTarifa em subcentavos (geralmente 0 ate confirmacao)
end_to_end_idstringIdentificador E2E do BACEN
transaction_idstring (UUID)Identificador unico da transacao
external_idstring ou nullSeu identificador externo
pix_keystringChave PIX do destinatario
descriptionstring ou nullDescricao informada pelo remetente
recipientobjectDados bancarios do destinatario (resolvidos via DICT)
recipient.namestring ou nullNome do titular da conta destino
recipient.documentstring ou nullCPF/CNPJ do destinatario (somente digitos)
recipient.ispbstring ou nullISPB da instituicao destino
recipient.accountstring ou nullNumero da conta destino
recipient.agencystring ou nullAgencia da conta destino
recipient.institution_namestring ou nullNome da instituicao destino

pix.payout.failed

Enviado quando um PIX enviado e rejeitado. Hold liberado, saldo restaurado.

json
{
  "event_type": "pix.payout.failed",
  "status": "rejected",
  "account_id": 10014,
  "amount": 500000,
  "fee_amount": 0,
  "end_to_end_id": "E3783905920260402101500000001",
  "entity_id": "26a48541-edce-4581-8c6e-564e7f2e6cd7",
  "transaction_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "external_id": "payment-456",
  "pix_key": "destinatario@email.com",
  "reason": "Conta destinatario nao encontrada",
  "recipient": {
    "name": "EMPRESA DESTINO LTDA",
    "document": "12345678000199",
    "ispb": "60701190",
    "account": "12345678",
    "agency": "0001",
    "institution_name": "Itau Unibanco S.A."
  }
}
CampoTipoDescricao
event_typestringSempre pix.payout.failed
statusstringSempre rejected — hold liberado, saldo restaurado
amountintegerValor em subcentavos
fee_amountintegerTarifa em subcentavos (geralmente 0 quando rejeitado)
end_to_end_idstringIdentificador E2E do BACEN
transaction_idstring (UUID)Identificador unico da transacao
external_idstring ou nullSeu identificador externo
pix_keystringChave PIX do destinatario
reasonstringDescricao do motivo da rejeicao
recipientobjectDados bancarios do destinatario (resolvidos via DICT)
recipient.namestring ou nullNome do titular da conta destino
recipient.documentstring ou nullCPF/CNPJ do destinatario (somente digitos)
recipient.ispbstring ou nullISPB da instituicao destino
recipient.accountstring ou nullNumero da conta destino
recipient.agencystring ou nullAgencia da conta destino
recipient.institution_namestring ou nullNome da instituicao destino

pix.payout.returned

Enviado quando um PIX enviado e devolvido apos liquidacao. O payload segue o mesmo formato de pix.return.received.

json
{
  "event_type": "pix.payout.returned",
  "status": "returned",
  "account_id": 10014,
  "amount": 300000,
  "entity_id": "26a48541-edce-4581-8c6e-564e7f2e6cd7",
  "return_e2e_id": "D9040088820260402111500000001",
  "original_e2e_id": "E9040088820260402095758709999671",
  "return_code": "MD06",
  "external_id": "payment-456"
}
CampoTipoDescricao
event_typestringSempre pix.payout.returned
statusstringSempre returned — PIX enviado devolvido
amountintegerValor devolvido em subcentavos
return_e2e_idstringE2E da devolucao
original_e2e_idstringE2E da transacao PIX original
return_codestringCodigo BACEN da devolucao
external_idstring ou nullSeu identificador externo da transacao original (se aplicavel)

pix.refund.requested

Enviado quando uma devolucao PIX e solicitada via MED (Mecanismo Especial de Devolucao). Fundos foram bloqueados cautelarmente na conta do merchant que recebeu o PIX original.

Somente PIX In

Este evento so se aplica a PIX recebidos (cash-in). Se voce enviou um PIX e ele foi devolvido, recebera pix.return.received em vez de pix.refund.*.

json
{
  "event_type": "pix.refund.requested",
  "status": "requested",
  "account_id": 10014,
  "amount": 300000,
  "entity_id": "26a48541-edce-4581-8c6e-564e7f2e6cd7",
  "block_id": "b1c2d3e4-f5g6-7890-hijk-lm1234567890",
  "infraction_report_id": "INF20260402001",
  "e2e_id": "E9040088820260402095758709999671",
  "external_id": null,
  "blocked_amount": 300000,
  "fee_amount": 0,
  "fraud_category": "SCAM",
  "deadline": "2026-04-09T14:30:00Z",
  "scenario": "cautelar",
  "created_at": "2026-04-02T14:30:00Z"
}
CampoTipoDescricao
event_typestringSempre pix.refund.requested
statusstringSempre requested — bloqueio cautelar ativo
amountintegerValor solicitado para devolucao em subcentavos
block_idstring (UUID)Identificador do bloqueio cautelar
infraction_report_idstringIdentificador da infracao no OnZ
e2e_idstringE2E da transacao PIX original que esta sendo contestada
external_idstring ou nullSeu identificador externo (se aplicavel)
blocked_amountintegerValor efetivamente bloqueado em subcentavos
fee_amountintegerTarifa MED em subcentavos
fraud_categorystringCategoria da fraude alegada (ex: SCAM, ACCOUNT_TAKEOVER)
deadlinestring (ISO 8601)Prazo para analise/defesa (UTC)
scenariostringCenario MED: cautelar ou fraude
created_atstring (ISO 8601)Data/hora do bloqueio (UTC)

pix.refund.completed

Enviado quando uma devolucao PIX e processada e concluida.

json
{
  "event_type": "pix.refund.completed",
  "status": "completed",
  "account_id": 10014,
  "amount": 300000,
  "entity_id": "26a48541-edce-4581-8c6e-564e7f2e6cd7",
  "block_id": "b1c2d3e4-f5g6-7890-hijk-lm1234567890",
  "infraction_report_id": "INF20260402001",
  "e2e_id": "E9040088820260402095758709999671",
  "external_id": null,
  "reason": "analysis_unfounded",
  "completed_at": "2026-04-02T14:30:00Z"
}
CampoTipoDescricao
event_typestringSempre pix.refund.completed
statusstringSempre completed — devolucao MED finalizada
amountintegerValor devolvido em subcentavos
block_idstring (UUID)Identificador do bloqueio cautelar
infraction_report_idstringIdentificador da infracao OnZ
e2e_idstringE2E da transacao PIX original
external_idstring ou nullSeu identificador externo (se aplicavel)
reasonstringMotivo da liberacao (ex: analysis_unfounded, manual_release)
completed_atstring (ISO 8601)Data/hora da conclusao (UTC)

pix.return.received

Enviado quando uma devolucao PIX e recebida (credito na conta).

json
{
  "event_type": "pix.return.received",
  "status": "received",
  "account_id": 10014,
  "amount": 300000,
  "entity_id": "26a48541-edce-4581-8c6e-564e7f2e6cd7",
  "return_e2e_id": "D9040088820260402111500000001",
  "original_e2e_id": "E9040088820260402095758709999671",
  "return_code": "MD06",
  "external_id": null
}
CampoTipoDescricao
event_typestringSempre pix.return.received
statusstringSempre received — credito de devolucao em conta
return_e2e_idstringE2E da devolucao
original_e2e_idstringE2E da transacao PIX original
return_codestringCodigo BACEN da devolucao
external_idstring ou nullSeu identificador externo da transacao original (se aplicavel)

webhook.test

Evento de teste disparado manualmente para validar a configuracao do webhook.

json
{
  "event_type": "webhook.test",
  "status": "test",
  "account_id": 10014,
  "entity_id": "26a48541-edce-4581-8c6e-564e7f2e6cd7",
  "message": "Webhook test event"
}

Como interpretar os webhooks

Para confirmar que dinheiro entrou na conta: Aguarde pix.charge.paid com status: "paid". Este e o unico evento que garante que o valor foi creditado e a taxa cobrada.

Para confirmar que dinheiro saiu da conta: Aguarde pix.payout.confirmed com status: "settled". O status processing e intermediario — o saldo esta reservado mas pode ser revertido se rejeitado.

Para devolucoes: pix.return.received com status: "received" confirma credito na conta.

Deduplicacao: Use o header X-Owem-Event-Id ou o campo end_to_end_id como chave de idempotencia.

Owem Pay Instituição de Pagamento — ISPB 37839059