Webhooks

Webhook Signature Verification

To ensure webhook requests are sent by our API and not forged by third parties, we sign each request using SHA-256.

How it works

Each webhook request includes a header:

X-Signature: <signature>

This signature is generated by signing the raw request payload with the secret you provided during webhook registration.

How to verify

  1. Retrieve the raw payload from the request exactly as received — do not parse or modify it before validation.
  2. Use your webhook secret to compute a SHA-256 HMAC of the raw payload.
  3. Compare the computed HMAC with the value from the X-Signature-SHA256 header.
  4. If they match, the request is authentic.

🚧

Always use the raw payload for signature validation. Parsing or re-encoding the body before computing the signature can lead to mismatches.


Events

  • PayInCompleted
  • PayOutCompleted
  • PayOutRefunded
  • PayInRefunded

Webhook Event Examples

🔹 PayInCompleted : Payment confirmed successfully.

{
  "data": {
    "account_id": 2,
    "amount": 3,
    "created_at": "2025-08-27T16:59:36.9111Z",
    "end_to_end_id": "E18236120202508271700s00a9b2c354",
    "expiration": 300,
    "id": "8217f189-39dc-4902-a562-243e59cdfd8d",
    "payer": {
      "account_bank": "NU PAGAMENTOS - IP",
      "account_ispb": "18236120",
      "document_number": "04870348306",
      "name": "BRUNO EDUARDO ARAÚJO SOUZA"
    },
    "qr_code_string": "00020101021226870014br.gov.bcb.pix2565pix.delbank.com.br/v2/12573115/cob/TX2025082713598Jqnpeb9TIgbLGsR5204000053039865802BR5907DELBANK6009SAO PAULO62070503***6304C540",
    "refunds": null,
    "status": "paid",
    "txid": "TX2025082713598Jqnpeb9TIgbLGsR"
  },
  "event": "PayInCompleted"
}

🔹 PayOutCompleted : Outgoing payment completed successfully.

{
  "data": {
    "account_id": 2,
    "amount": 1,
    "created_at": "2025-08-27T17:06:24.190536Z",
    "end_to_end_id": "E12573115202508271706Z8hFFYdvcwb",
    "error": null,
    "id": "24147420-095d-4583-8da0-8558776ed8ed",
    "payer": {
      "account_bank": "nel3",
      "account_number": "31216",
      "document_number": "59614054000190",
      "name": "Nel3 New GTW"
    },
    "recipient": {
      "account_bank": "NU PAGAMENTOS - IP",
      "account_ispb": "18236120",
      "document_number": "04870348306",
      "name": "Bruno Eduardo Araújo Souza",
      "pix_key": "04870348306"
    },
    "reference_code": "33043d54-02ab-4069-808b-10b7d1fe17af",
    "refunds": null,
    "status": "done"
  },
  "event": "PayOutCompleted"

🔹PayOutRefunded : Return of an outgoing payment (the recipient or the bank returned the funds).

{
  "data": {
    "amount": 1,
    "created_at": "2025-08-27T17:08:35.279990789Z",
    "end_to_end_id": "D18236120202508271708s00737bbb7d",
    "id": "cf04ea0e-e22e-4ffc-befb-7f2c338ce2ee",
    "original_end_to_end_id": "E12573115202508271706Z8hFFYdvcwb",
    "reference_code": "33043d54-02ab-4069-808b-10b7d1fe17af"
  },
  "event": "PayOutRefunded"
}

🔹PayInRefunded : Return of funds to the payer's account.

This event will be sent when there is support for the return of a receipt (Pay In) initiated via API and will be used every time a PIX receipt is returned to the payer.

{
  "data": {
    "id": "6e543181-4f25-48b4-9eec-03cd22d62cad",
    "txid": "7eff145ff45c418dbe4c46ec5eb8084",
    "amount": 1,
    "end_to_end_id": "E00000000202512192133284b76675fe",
    "original_end_to_end_id": "E18236120202508271700s00a9b2c353",
    "created_at": "2025-08-27T17:08:35.279990789Z"
  },
  "event": "PayInRefunded"
}