PixIn Webhook (Deposits)
Receive automatic notifications whenever an incoming (PIX) transaction changes status.
Endpoint and Authentication
POSTURL set by you through the /api/SendWebhook route
Example: https://mysite.com/api/webhook/baanko
Headers Sent
Headers
Content-Type: application/jsonX-Webhook-Event-Id: <event id, the same on every retry>X-Webhook-Correlation-Id: <id>X-Webhook-Sent-At: 2025-11-27T11:07:15ZX-Webhook-Attempt: 1X-Webhook-Secret: <your webhook secret, when configured>Use X-Webhook-Event-Id to ignore duplicates, and compare X-Webhook-Secret with the secret you configured to make sure the call came from Baanko.
QR Code Created / Awaiting Payment
Webhook Payload - Awaiting
{ "object": "transaction", "type": "cashin", "status": "awaiting", "companyId": "7719342c-a3f4-443b-9c8c-a06ec7a43b7d", "transactionId": "cmw4csk200mfy6nr3eibya4va", "subTransactionId": 1607988, "externalRef": "ORDER-10001", "method": "pix", "value": 500, "amount": 5, "currency": "BRL", "providerTxId": "cmw4csk200mfy6nr3eibya4va", "endToEndId": null, "providerEndToEndId": null, "pixKey": null, "providerAmount": 5, "providerCreditedAt": null, "providerPayload": null, "payer": { "name": null, "documentId": null, "document": null, "bankName": null, "ispb": null, "issuer": null, "number": null, "accountType": null }, "receiver": { "name": null, "documentId": null, "document": null, "ispb": null, "issuer": null, "number": null, "accountType": null }, "createdAt": "2026-11-05T23:15:02.118", "updatedAt": "2026-11-05T23:15:02.118+00:00", "processedAt": "2026-11-05T23:15:02Z"}Payment Confirmed
Webhook Payload - Successful
{ "object": "transaction", "type": "cashin", "status": "successful", "companyId": "7719342c-a3f4-443b-9c8c-a06ec7a43b7d", "transactionId": "6dcf2aee0d6148e1a12b78db78", "subTransactionId": 41394, "externalRef": "LEAD-1764252408748_52740", "method": "pix", "value": 500, "amount": 5, "currency": "BRL", "endToEndId": "E22896431202511271407sjUGQflhcVE", "providerEndToEndId": "E22896431202511271407sjUGQflhcVE", "providerTxId": "6dcf2aee0d6148e1a12b78db78", "pixKey": "c32361fa-44de-4be7-815f-0e782a10860c", "providerAmount": 5, "providerCreditedAt": "2025-11-27T11:07:14.997603", "providerPayload": "{\"id\":\"6dcf2aee...\",\"status\":\"paid\"}", "localInstrument": null, "transactionType": null, "creditDebitType": null, "remittanceInformation": null, "payer": { "name": "JOHN EXAMPLE", "documentId": "12345678909", "document": "12345678909", "bankName": null, "ispb": null, "issuer": null, "number": null, "accountType": null }, "receiver": { "name": null, "documentId": "48969523000177", "document": "48969523000177", "ispb": null, "issuer": null, "number": null, "accountType": null }, "createdAt": "2025-11-27T11:05:40.218", "updatedAt": "2025-11-27T11:07:15.104+00:00", "processedAt": "2025-11-27T11:07:14Z"}Field Descriptions
companyIdstring (UUID)Your company IDtransactionIdstringThe id returned when you created the transactionsubTransactionIdnumberInternal Baanko ID of the transactionexternalRefstring | nullYour reference sent on creationvalueintegerAmount in cents (500 = R$ 5.00)amountnumberAmount in reais (5 = R$ 5.00)endToEndIdstringUnique PIX transaction identifier (E2E)providerEndToEndIdstringE2E returned by the providerproviderTxIdstringTransaction ID at the providerpixKeystringPIX key that received the paymentproviderAmountnumberAmount in reais returned by the providerproviderCreditedAtstringDate/time the provider credited the paymentproviderPayloadstring | nullRaw payload returned by the provider, as a JSON stringpayerobjectPayer data (who sent the PIX)receiverobjectReceiver data (your company)createdAtstringWhen the transaction was createdupdatedAtstringLast update of the transactionprocessedAtstringProcessing date/time (UTC)Possible Statuses
awaitingAwaiting payment
successfulPaid / confirmed
failurePayment failed
refundedRefunded / returned
Automatic Retries
OKThe first delivery is immediate. Reply with any 2xx status within 10 seconds to confirm receipt.
OKAny other response, or a timeout, is retried up to 16 times at growing intervals (5s, 15s, 30s, 1 min, 2 min, 5 min ... up to 24 h), for about 2 days in total.
OKRetries keep the same X-Webhook-Event-Id, so you can safely skip an event you already processed. X-Webhook-Attempt tells you which attempt it is.
Response Example
Response
{ "received": true, "idempotent": false }Handler Example
Node.js / Express
app.post('/webhook/baanko', async (req, res) => { const { type, status, transactionId, value, amount, endToEndId, payer, providerCreditedAt } = req.body; const eventId = req.headers['x-webhook-event-id']; // Check the secret you configured if (req.headers['x-webhook-secret'] !== process.env.BAANKO_WEBHOOK_SECRET) { return res.status(401).end(); } // Skip events that were already processed const processed = await checkIdempotency(eventId); if (processed) { return res.status(200).json({ received: true, idempotent: true }); } if (type === 'cashin' && status === 'successful') { console.log(`Payment received: R$ ${amount}`); console.log(`Amount in cents: ${value}`); console.log(`Payer: ${payer.name}`); console.log(`E2E ID: ${endToEndId}`); console.log(`Credited at: ${providerCreditedAt}`); // Process the payment... await processPayment(transactionId, value); } // Mark as processed await markAsProcessed(eventId); res.status(200).json({ received: true, idempotent: false });});