Webhooks
What Reconbanker sends to your system, when, and how to handle retries.
Webhooks
Reconbanker tells your system about new results by calling a webhook URL you provide. This page lists every event that fires, what each payload looks like, and how retries work.
Where the webhook is configured
The webhook URL, auth scheme, and auth token all live in Account settings → Webhook. See Webhook settings.
What Reconbanker sends
Every webhook is an HTTP POST with a JSON body:
POST https://your-system.example.com/reconbanker/webhook
Content-Type: application/json
Accept: application/json
Authorization: Bearer YOUR_TOKENThe Authorization header is omitted when you have not configured a token. The scheme (Bearer or Api-Key) follows the auth type you saved.
Events in reconcile mode
Matched
Fires when a bank transaction is identified as the payment for one of your pending orders.
{
"external_id": "ORDER-1234",
"status": "matched",
"amount": 1500.00,
"currency": "UYU",
"name": "Juan Perez"
}Ambiguous
Fires when more than one bank transaction was an equally plausible match. Reconbanker will not pick. Your team or system needs to decide.
{
"external_id": "ORDER-1234",
"status": "ambiguous",
"amount": 1500.00,
"currency": "UYU",
"name": "Juan Perez"
}Expired (optional)
Fires when an order has been waiting more than 5 days without a match. Only sent if you have turned on Notify on expired in account settings.
{
"external_id": "ORDER-1234",
"status": "expired",
"amount": 1500.00,
"currency": "UYU",
"name": "Juan Perez"
}Events in passthrough mode
Bank movement
Fires once for each new bank transaction Reconbanker reads from your bank. Only fires when the bank transaction has a sender name on it.
{
"id": "9b0c1234-5678-90ab-cdef-1234567890ab",
"amount": 1500.00,
"currency": "UYU",
"name": "Juan Perez",
"received_at": "2026-05-13T15:30:00.000Z"
}received_at is the timestamp the bank reported for the transfer, not the moment Reconbanker read it.
Adding your own fields
You can attach extra metadata to every webhook through the Extra webhook fields setting. Anything you put there is merged into the payload above. For example, with:
{ "tenant": "acme", "environment": "production" }the matched payload becomes:
{
"external_id": "ORDER-1234",
"status": "matched",
"amount": 1500.00,
"currency": "UYU",
"name": "Juan Perez",
"tenant": "acme",
"environment": "production"
}These reserved keys cannot be overridden by extra fields: external_id, status, amount, currency, name, id, received_at.
Retries
See Webhook settings → Retry behavior for the backoff schedule and how to replay a failed delivery.
Sending a webhook manually
If a delivery failed and you have since fixed your server, open the request (or bank transaction) in the dashboard and press Resend webhook. Reconbanker queues a fresh delivery.
Testing locally
To verify your handler before going to production, point your account at a local listener and watch it print incoming requests:
node -e "require('http').createServer((req,res)=>{let b='';req.on('data',c=>b+=c);req.on('end',()=>{console.log(req.method,req.url,b);res.end('ok')})}).listen(4000)"Then, from the Reconbanker dashboard, press Resend webhook on any matched request to trigger a real delivery to your listener.