Debt Collection Events#

CasaPay sends webhook events for debt collection case lifecycle changes.

Event Types#

EventDescription
collection_case.createdA new case was submitted
collection_case.updatedCase status or details changed
collection_case.needs_detailsAdditional information required
collection_case.activeCase is being actively worked
collection_case.pausedCase was paused
collection_case.closedCase was closed
debt_payment.createdA payment was received from the debtor
case_chat.createdA new chat message was received
case_file.uploadedA 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=5257a869e7ecebeda32affa62cdca3fa51cad7e77a0e56ff536d0ce8e108d8bd

Handling 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();
});