Notificação HTTP que o integrador recebedor recebe quando alguém paga um QR Code Pix emitido por ele (cash-in confirmado).
Evento recebimento (Recebimento de Pix). Para cash-out (efetivado ou falha), veja Webhook de pagamento.
| Papel | Quem é | Onde aparece |
|---|---|---|
| Integrador (listener) | Conta recebedora que cadastrou o webhook | Recebe o POST na webhookUrl |
| Recebedor | Quem recebeu o crédito (titular do QR) | nomeRecebedor, cpfRecebedor/cnpjRecebedor, bancoRecebedor, campo chave |
| Pagador | Quem pagou o QR (terceiro, débito) | nomePagador, cpfPagador/cnpjPagador, bancoPagador |
No evento recebimento, {chave} na URL do cadastro e chave no payload referem-se à mesma chave Pix do recebedor (a do QR).
Registrar o webhook na chave Pix vinculada ao QR (mesma chave embutida no BR Code).
| Método | Rota | Descrição |
|---|---|---|
| GET | /api/v2/cobranca/webhooks/{chave} | Lista webhooks da chave (filtro opcional eventos) |
| PUT | /api/v2/cobranca/webhooks/{chave} | Cria webhook(s) — não atualiza existentes |
| PATCH | /api/v2/cobranca/webhooks/{id} | Atualiza URL/autorização de um webhook pelo id |
| DELETE | /api/v2/cobranca/webhooks/{id} | Remove um webhook pelo id |
{
"webhookUrl": "https://integrador.exemplo.com.br/pix/recebimento",
"eventos": ["recebimento"]
}
| Campo | Descrição |
|---|---|
{chave} | Chave Pix do recebedor (EVP, e-mail, CPF/CNPJ ou telefone do QR) — webhook na mesma chave do QR |
webhookUrl | URL que receberá o POST |
eventos | Deve incluir "recebimento" |
O PUT somente cria. Para alterar URL ou autorização, use PATCH /{id} com o id retornado no GET/PUT. Para remover, use DELETE /{id}.
Contraste com pagamento: os eventos
pagamentoepagamento-falhaaceitam cadastro em qualquer chave da conta pagadora. Ver Webhook de pagamento.
Autorização opcional (autorizacao.tipo + autorizacao.valor) — repassada no header Authorization de cada entrega.
curl --location --request PUT 'https://api-h.nuvende.com.br/api/v2/cobranca/webhooks/{{chave_pix}}' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{access_token}}' \
--data '{
"webhookUrl": "https://integrador.exemplo.com.br/pix/recebimento",
"eventos": ["recebimento"]
}'
Scopes: webhooks.read / webhooks.write.
Pagador paga QR Code
→ crédito Pix processado
→ POST na webhookUrl do integrador (evento recebimento)
| # | Condição |
|---|---|
| 1 | Crédito Pix processado com sucesso |
| 2 | Notificação contém a chave do recebedor |
| 3 | Existe ao menos um webhook com evento = recebimento na mesma chave |
Se houver vários webhooks recebimento na chave (até 3), todos recebem o mesmo payload. Sem webhook na chave → nenhuma requisição.
tpIniciacao | Tipo de QR |
|---|---|
2 | QR Code estático |
3 | QR Code dinâmico (COB / COBV) |
Outros valores (ex.: iniciação manual ou por chave) usam o mesmo formato de payload; o foco desta página é o pagamento via QR.
| Aspecto | Valor |
|---|---|
| Método | POST |
| Body | JSON |
| Timeout | 15 s |
| Retentativas | Até 3, intervalo de 300 s |
| Sucesso | HTTP 2xx encerra retentativas |
| Header | Descrição |
|---|---|
X-REQUEST-ID | UUID único por tentativa de entrega |
Authorization | {tipo} {token} — somente se configurado no cadastro |
Corpo JSON enviado no POST. Estrutura alinhada ao webhook de pagamento, com campo reservado infoPagador: [] neste evento (pagamento / pagamento-falha usam infoRecebedor: []).
{
"txid": "7978c0c97ea847e78e8849634473c1f1",
"tpIniciacao": 3,
"valor": 150.85,
"chave": "[email protected]",
"horario": "2020-01-23T22:08:10.012Z",
"status": "EFETIVADO",
"endToEndId": "E0435879820200123221500000000001",
"infoPagador": [],
"bancoPagador": {
"ispb": "04358798",
"nome": "Banco do Pagador S.A."
},
"nomePagador": "Fulano de Tal",
"cpfPagador": "11111111111",
"cnpjPagador": null,
"bancoRecebedor": {
"ispb": "38297374",
"nome": "Nuvende IP S.A."
},
"nomeRecebedor": "Loja Exemplo LTDA",
"cpfRecebedor": null,
"cnpjRecebedor": "4358798000107",
"devolucoes": [],
"motivo": null
}
{
"txid": null,
"tpIniciacao": 2,
"valor": 49.90,
"chave": "efca2b48-0d8a-4f10-9f07-26e6b5a1b921",
"horario": "2026-07-08T15:30:00.000000Z",
"status": "EFETIVADO",
"endToEndId": "E382973742026070815500QR1234567890",
"infoPagador": [],
"bancoPagador": {
"ispb": "00000000",
"nome": "Banco Externo S.A."
},
"nomePagador": "Maria Pagadora",
"cpfPagador": "98765432100",
"cnpjPagador": null,
"bancoRecebedor": {
"ispb": "38297374",
"nome": "Nuvende IP S.A."
},
"nomeRecebedor": "Maria Souza Exemplo",
"cpfRecebedor": "52998224725",
"cnpjRecebedor": null,
"devolucoes": [],
"motivo": null
}
| Campo | Tipo | Descrição |
|---|---|---|
txid | string | null | Conciliação da cobrança. QR dinâmico: txid do QR/COB. QR estático sem conciliação: null |
tpIniciacao | integer | 2 = QR estático · 3 = QR dinâmico |
valor | number | Valor creditado (R$) |
chave | string | Chave Pix do recebedor (mesma do QR) |
horario | datetime ISO 8601 | Liquidação |
status | string | Sempre "EFETIVADO" |
endToEndId | string | End-to-end da transação |
infoPagador | array | Reservado. Sempre [] |
bancoPagador / bancoRecebedor | object | Instituição do pagador (quem pagou) e do recebedor (quem creditou) |
nomePagador / nomeRecebedor | string | Nome de quem pagou / de quem recebeu |
cpfPagador / cnpjPagador | string | null | Documento do pagador |
cpfRecebedor / cnpjRecebedor | string | null | Documento do recebedor |
devolucoes | array | Sempre [] neste evento |
motivo | null | Sempre null neste evento |
txid para correlacionar com a cobrança criada via API.txid: concilie por endToEndId + valor + horario.Roteamento pela chave Pix do QR, não pela conta. Cadastre o webhook na mesma chave usada ao gerar o QR. Com várias chaves, cada uma precisa de cadastro próprio.
A Nuvende envia até 3 retentativas (intervalo de 300 s) quando não recebe HTTP 2xx em até 15 s. O mesmo evento de negócio pode chegar mais de uma vez — com o mesmo payload e novo X-REQUEST-ID por tentativa.
Obrigação do integrador: tratar o endpoint de webhook como idempotente no seu sistema, para evitar efeitos operacionais duplicados (baixa em dobro da cobrança, crédito repetido no saldo interno, reenvio de e-mail/NF, fila processada duas vezes). Validar status (ex.: EFETIVADO) e demais campos do payload antes de operacionalizar na aplicação; não baixe cobrança nem credite saldo interno sem conferir o status enviado.
| Chave sugerida | Quando usar |
|---|---|
endToEndId | Identificador único da transação Pix — preferencial |
txid + endToEndId | QR dinâmico com conciliação por txid |
X-REQUEST-ID | Controle por tentativa de entrega (não substitui a chave de negócio) |
Práticas recomendadas:
endToEndId) em transação atômica; só então retorne HTTP 2xx.endToEndId devem resultar em um único efeito (lock otimista, INSERT com constraint única ou equivalente).Trate endToEndId como identificador único do evento. Responda 2xx o mais rápido possível após garantir idempotência; timeout ou status ≥ 400 geram nova tentativa.
| Situação | Dispara recebimento? |
|---|---|
| QR emitido / criado (ainda não pago) | Não |
| Envio de Pix (cash-out / pagamentos iniciados) | Não — use Webhook de pagamento (pagamento / pagamento-falha) |
| Devolução do recebimento | Pode chegar no mesmo evento com devolucoes preenchido — fora do exemplo “QR pago” acima |
Qualquer status 2xx. Corpo vazio ou {} — ambos aceitos.
HTTP/1.1 200 OK