Payment reminders
The automatic reminder sequence, when each email fires and how to stop it.
Unpaid invoices are chased automatically. There are exactly five reminder stages, placed around the due date:
| Stage | When | Tone |
|---|---|---|
| Upcoming | 3 days before due | Courtesy note — no action needed if payment is on its way |
| Due today | On the due date | Asks for it to be settled today |
| Overdue | 7 days past due | A week late — please arrange payment |
| Overdue | 14 days past due | Two weeks late — pay, or tell us if there is a problem |
| Final | 30 days past due | Final automated reminder before it is followed up directly |
src/app/api/cron/send-invoice-reminders/route.ts (CADENCE, MAX_DAYS_PAST_DUE). These are emails sent by a background job — there is no screen that shows this, so it is drawn as a schedule.One email per invoice per run
An invoice that is already, say, 20 days overdue when reminders start does not receive the 7-day and 14-day notices as well. Only the most advanced stage it has reached and not yet been sent goes out — a single current notice.
Which invoices are chased
Only invoices that are sent, viewed, partially_paid or overdue. A draft is never chased, and a paid or voided invoice drops out of the sequence immediately.
Dunning stops after six months
Nothing more than 180 days past due is chased automatically. Beyond that, pursuing the debt is a human job, and automated mail about very old invoices reads as spam. Without that bound the first run would have emailed every customer with any unpaid invoice in your entire history.
Dates use your timezone
"Due today" means today where your business is, not where the server is. Day maths is done in your company's timezone.