Pular para o conteúdo principal

Webhook

Introdução

Webhook é um recurso que permite que o PicPay envie notificações para o seu sistema a cada mudança de status de uma cobrança. Ele é útil para que você possa manter o seu sistema atualizado com o status de cada cobrança, sem precisar consultar a API do PicPay a todo momento.

Para receber as notificações, você precisa configurar a URL no Painel Lojista com o endereço do seu sistema que irá receber as notificações. Após essa configuração, o PicPay irá enviar uma requisição HTTP POST para a URL configurada a cada mudança de status de uma cobrança.

Configurando a URL de notificação

Para configurar a URL de notificação, acesse o Painel Lojista e siga os passos abaixo:

  1. Acesse o menu Configurações que fica no dropdown do canto superior direito da tela.

img

  1. Clique na aba Meu checkout.

img

  1. Ative a funcionalidade URL de notificação clicando no botão, e informe a URL do seu sistema que irá receber as notificações.
    1. A URL deve ser HTTPS.
    2. A URL não pode conter nenhum query parameter.
    3. Não é permitido usar um IPv4 como URL de notificação.

img

  1. Ao clicar em Salvar alterações, será gerada uma API Key, conforme imagem abaixo.

img

  1. Copie a API Key, pois será enviada no header authorization de todas as requisições.

Pronto! A partir desse momento, o PicPay passará a enviar notificações para a URL configurada.

Contrato e Exemplos

No corpo da requisição enviada pelo PicPay, você receberá um objeto JSON com as informações sobre a cobrança que teve o status alterado. Na requisição haverá uma header event_type que pode possuir os seguintes valores: TransactionPaymentMessage.

Campos

CampoDescriçãoTipoValores
data.transaction.originalTransactionIdId original da transaçãoString UUID ou nulo
data.transaction.statusStatus da transaçãoPAYED, REFUNDED ou PARTREFUNDEDPAYED, REFUNDED ou PARTREFUNDED
data.transaction.idId da transaçãoString UUID
data.transaction.amountValor da transação*Inteiro em centavos
data.transaction.paymentTypeTipo de pagamento da transaçãoStringWALLET, PIX ou CREDIT_CARD
data.transaction.createdAtData que a transação foi criadaData em string
data.transaction.updatedAtData que a transação foi alteradaData em string
data.charge.qrCodeqrCode do link de pagamentoString
data.charge.expiresAtData em que o link expiraData em string ou nulo
data.charge.amountValor do linkInteiro em centavos
data.charge.paymentLinkIdId do link de pagamentoString
data.charge.checkoutLinkLink de pagamentoString
eventDateData em que o evento aconteceuString
typeTipo da transaçãoStringREFUND ou PAYMENT

*O valor do cancelamento parcial será apresentado nesse campo.

Exemplos de webhook para atualização de status da cobrança

PAGAMENTO

Abaixo, você pode ver um exemplo do corpo de uma requisição de notificação de uma cobrança que foi criada e autorizada.

{
"data": {
"transaction": {
"originalTransactionId": null,
"status": "PAYED",
"id": "a105da56-a372-4e6e-976e-xxxxxxxxxxxx",
"amount": 300,
"paymentType": "CREDIT_CARD",
"createdAt": "2025-05-12T20:50:46.000000Z",
"updatedAt": "2025-05-12T20:50:46.000000Z"
},
"charge": {
"qrCode": "00020126810014BR.GOV.BCB.PIX2559qr-code.picpay.com/xxxxxxxxxxxxxxxxxxxxx...",
"expiresAt": "2025-06-30 00:00:00",
"amount": 300,
"paymentLinkId": "174708287368xxxxxxxxxxx",
"checkoutLink": "https://link.picpay.com/p/174708287368xxxxxxxxxxx"
}
},
"eventDate": "2025-05-12T20:50:46.000000Z",
"type": "PAYMENT"
}

Prefere ver um exemplo como um cURL? Segue abaixo:

curl -X 'POST' 'https://yourdomain.com/webhook' \
-H 'connection: close' \
-H 'host: yourdomain.com' \
-H 'accept-encoding: gzip, compress, deflate, br' \
-H 'authorization: a45c2dee-6435-xxxx-yyyy-zzzzzzzzzzzz' \
-H 'event-type: TransactionPaymentMessage' \
-H 'content-type: application/json' \
-H 'accept: application/json, text/plain, */*' \
-d $'{
"data": {
"transaction": {
"originalTransactionId": null,
"status": "PAYED",
"id": "a105da56-a372-4e6e-976e-xxxxxxxxxxxx",
"amount": 300,
"paymentType": "CREDIT_CARD",
"createdAt": "2025-05-12T20:50:46.000000Z",
"updatedAt": "2025-05-12T20:50:46.000000Z"
},
"charge": {
"qrCode": "00020126810014BR.GOV.BCB.PIX2559qr-code.picpay.com/xxxxxxxxxxxxxxxxxxxxx...",
"expiresAt": "2025-06-30 00:00:00",
"amount": 300,
"paymentLinkId": "174708287368xxxxxxxxxxx",
"checkoutLink": "https://link.picpay.com/p/174708287368xxxxxxxxxxx"
}
},
"eventDate": "2025-05-12T20:50:46.000000Z",
"type": "PAYMENT"
}'

CANCELAMENTO

A seguir, temos um exemplo do corpo de uma requisição de notificação de uma cobrança que foi cancelada.

{
"data": {
"transaction": {
"originalTransactionId": "48581c5f-f077-4727-9d44-xxxxxxxxxxxx",
"status": "REFUNDED",
"id": "2ac7260e-15ab-497f-a31c-xxxxxxxxxxxx",
"amount": 2,
"paymentType": "WALLET",
"createdAt": "2025-05-12T21:08:15.000000Z",
"updatedAt": "2025-05-12T21:08:15.000000Z"
},
"charge": {
"qrCode": "00020126810014BR.GOV.BCB.PIX2559qr-code.picpay.com/xxxxxxxxxxxxxxxxxxxxx...",
"expiresAt": "2025-06-30 00:00:00",
"amount": 2,
"paymentLinkId": "174708287368xxxxxxxxxxx",
"checkoutLink": "https://link.picpay.com/p/174708287368xxxxxxxxxxx"
}
},
"eventDate": "2025-05-12T21:08:15.000000Z",
"type": "REFUND"
}

Exemplo em cURL

curl -X 'POST' 'https://yourdomain.com/webhook' \
-H 'connection: close' \
-H 'host: yourdomain.com' \
-H 'accept-encoding: gzip, compress, deflate, br' \
-H 'authorization: a45c2dee-6435-xxxx-yyyy-zzzzzzzzzzzz' \
-H 'event-type: TransactionPaymentMessage' \
-H 'content-type: application/json' \
-H 'accept: application/json, text/plain, */*' \
-d $'{
"data": {
"transaction": {
"originalTransactionId": "48581c5f-f077-4727-9d44-xxxxxxxxxxxx",
"status": "REFUNDED",
"id": "2ac7260e-15ab-497f-a31c-xxxxxxxxxxxx",
"amount": 2,
"paymentType": "WALLET",
"createdAt": "2025-05-12T21:08:15.000000Z",
"updatedAt": "2025-05-12T21:08:15.000000Z"
},
"charge": {
"qrCode": "00020126810014BR.GOV.BCB.PIX2559qr-code.picpay.com/xxxxxxxxxxxxxxxxxxxxx...",
"expiresAt": "2025-06-30 00:00:00",
"amount": 2,
"paymentLinkId": "174708287368xxxxxxxxxxx",
"checkoutLink": "https://link.picpay.com/p/174708287368xxxxxxxxxxx"
}
},
"eventDate": "2025-05-12T21:08:15.000000Z",
"type": "REFUND"
}'