Skip to content

Reminders & follow-up

When Wajub reminds your customer of an unpaid invoice, and how to follow up from your own code.

Wajub reminds your customer of an unpaid invoice by e-mail, before and after its due date, whether you sent the invoice through the API or from the Dashboard. Reminders are on unless you turn them off.

When reminders go out

Each reminder falls on a day counted from the invoice's due_date. Until you pick other days, they are:

ReminderDay
A week beforedue_date − 7
Three days beforedue_date − 3
The day beforedue_date − 1
A day latedue_date + 1
A week latedue_date + 7

Settings → Invoice → Automatic Reminders in the Dashboard picks other days, 1, 3, 7 or 14 days before or after the due date, or turns reminders off. The choice holds for every invoice of the account: no invoice turns them off on its own, through the API or elsewhere.

A reminder whose day falls on or before the day the invoice was sent is skipped, so an invoice sent after its due date is reminded only on the days still ahead of it. A reminder never lands on a day the customer was already reminded. When several reminders are due at once, only the latest goes, and none goes out more than a week after its day.

Who receives what

An invoice is reminded when it has a due_date, has been sent (sent, viewed, partial or overdue) and still has something owed. The e-mail goes to the customer customer_id links, else to customer_email; an invoice with neither is not reminded. Drafts, quotes and estimates never are.

The reminder is written in the invoice's language, with the PDF attached. It gives the invoice number, the amount still due and the due date, with a button to the invoice's page. A partly paid invoice is reminded of what is left.

A reminder sends no webhook and changes nothing on the invoice.

What stops the reminders

The invoice being paid, cancelled or refunded, or nothing being left to pay. A reminder that was about to go out when the invoice was paid is not sent.

Following up from your own code

To follow up over another channel, such as SMS or WhatsApp, or on a schedule of your own, you have two signals to build on, and they behave differently.

The first is the list, filtered on what is outstanding.

curl "https://api.wajub.com/invoices?status=overdue&payment_status=unpaid" \
  -H "Authorization: sk.xxxxxxxxxxxxxxxx…"

payment_status takes unpaid, partially_paid or fully_paid, and narrows on what has actually been received rather than on the status label. due_date_from and due_date_to bracket the window when you want this week's late invoices rather than all of them.

The overdue label lags by up to a day

Nothing flips an invoice to overdue at midnight. It happens overnight once due_date has passed, so an invoice that fell due this morning still reads sent until tomorrow. If you need the distinction on the day, compare due_date against today yourself rather than filtering on the status.

The second signal is the webhook, with one gap worth planning around.

invoice.updatedevent
Fires on changes made through the API, on the first view, and on a payment. Read `data.status`.
Payload
{
"id": "evt_aio5DpN577tNU2vOxdmuZGhT",
"event": "invoice.updated",
"livemode": true,
"created": "2026-09-25T09:12:44+00:00",
"api_version": "2026-10-11",
"pending_webhooks": 1,
"request": {
"id": null,
"idempotency_key": null
},
"data": {
"id": "inv_LRQqYvlhrgUOE225KMKU",
"invoice_number": "INV-2026-0001",
"status": "partial",
"currency": "XAF",
"total": 450000,
"amount_paid": 150000,
"amount_due": 300000,
"due_date": "2026-09-25"
}
}

The gap is overdue itself. Invoices turn overdue overnight, and that change sends no webhook. Overdue is something you notice by asking, not something you are told.

So the pattern that works: hold your own list of open invoices, check it on your own schedule, and send your own reminder over the channel that customer actually reads. The message needs the payment URL, which you rebuild from the invoice id.

What to put in your reminder
https://invoice.wajub.com/inv_LRQqYvlhrgUOE225KMKU

What did you think of this content?