Debt Collection Events#
CasaPay sends webhook events for debt collection case lifecycle changes.
Event Types#
| Event | Description |
|---|---|
collection_case.created | A new case was submitted |
collection_case.updated | Case status or details changed |
collection_case.needs_details | Additional information required |
collection_case.active | Case is being actively worked |
collection_case.paused | Case was paused |
collection_case.closed | Case was closed |
debt_payment.created | A payment was received from the debtor |
case_chat.created | A new chat message was received |
case_file.uploaded | A file was uploaded to the case |
Event Object#
{
"id": "evt_dc_abc123",
"object": "event",
"type": "collection_case.updated",
"data": {
"object": {
"id": "dc_a1b2c3d4",
"object": "collection_case",
"reference": "Q8OAXF3W",
"status": "active",
"amount_to_recover": 360000,
"remainder": 240000,
"currency": "eur"
}
},
"created": 1707436800
}Webhook Signature#
Debt collection webhooks use the same HMAC-SHA256 signature scheme:
X-CasaPay-Signature: t=1707436800,v1=5257a869e7ecebeda32affa62cdca3fa51cad7e77a0e56ff536d0ce8e108d8bdHandling Debt Collection Events#
app.post('/webhooks/casapay', async (req, res) => {
const event = req.body;
switch (event.type) {
case 'collection_case.updated':
await updateCaseStatus(event.data.object);
break;
case 'debt_payment.created':
const payment = event.data.object;
console.log(`Received ${payment.amount / 100} ${payment.currency} for case ${payment.case}`);
await recordDebtPayment(payment);
break;
case 'collection_case.closed':
await archiveCase(event.data.object);
break;
case 'case_chat.created':
await notifyNewMessage(event.data.object);
break;
}
res.status(200).send();
});