Invoice Events#

CasaPay sends webhook events for invoice lifecycle changes.

Event Types#

EventDescription
invoice.createdA new invoice was created
invoice.finalizedAn invoice was finalized and is ready for payment
invoice.sentAn invoice was sent to the customer
invoice.paidAn invoice was paid in full
invoice.payment_failedA payment attempt on the invoice failed
invoice.voidedAn invoice was voided
invoice.marked_uncollectibleAn invoice was marked as uncollectible
invoice.updatedAn invoice was updated
credit_note.createdA credit note was issued
credit_note.voidedA credit note was voided

Event Object#

{
  "id": "evt_inv_abc123",
  "object": "event",
  "type": "invoice.paid",
  "data": {
    "object": {
      "id": "inv_abc123",
      "object": "invoice",
      "customer": "cus_123456789",
      "status": "paid",
      "amount_due": 125000,
      "amount_paid": 125000,
      "currency": "eur",
      "paid_at": 1706400000
    }
  },
  "created": 1706400000
}

Handling Invoice Events#

app.post('/webhooks/casapay', async (req, res) => {
  const event = req.body;

  switch (event.type) {
    case 'invoice.paid':
      await recordPayment(event.data.object);
      break;
    case 'invoice.payment_failed':
      await sendPaymentReminder(event.data.object);
      break;
    case 'invoice.marked_uncollectible':
      // Consider initiating debt collection
      await initiateCollection(event.data.object);
      break;
  }

  res.status(200).send();
});