Reminder logs

Every reminder send is recorded — when, to whom, what was sent, and whether it succeeded

OwnerManager

Reminders are "fire and forget" — once a template is active and an event schedules a send, you don't think about it daily. But when a customer says "I never got my MOT reminder", the History and Scheduled tabs at Workshop Settings → Reminders are where you check what actually happened. History lists every log (filterable by status); Scheduled shows just the queued rows that haven't fired yet.

What's in each log row

The History table's columns are Customer, Message, Type, When, Status and Actions.

  • When — the timing of the send: due, scheduled for, or actually sent, depending on where the row is in its life. (It's labelled "When", not "Scheduled date".)
  • Type — the reminder type, or Custom for a one-off
  • Customer — the customer's name, plus their business name if any
  • Message — the one-off title or template name, falling back to the message body
  • Status — one of scheduled, sent, failed, cancelled, skipped
  • On failed rows, hover the red "Error" label to see the cause (e.g. "Insufficient credits")

Scheduled rows also carry actions: Send Now, Edit recipient, Cancel (and Delete for one-off customs).

The History tab with the When and Status columns.

Why "resolved body" matters

Each log row stores the message body with placeholders already resolved, so if a customer reports a confusing message the record shows what was actually built for them — placeholders may have resolved to something you didn't expect (e.g. a missing customer name leaving "Hi ," at the top). In the History table the body is shown for one-off sends; template-driven rows display the template name instead.

The five statuses

StatusMeaning
scheduledQueued, not yet due
sentSuccessfully dispatched
failedTried to send but failed. Reason in errorMessage
cancelledManually cancelled (e.g. customer rebooked before the send fired)
skippedMore than 14 days overdue when the cron ran (e.g. after an outage), deliberately not sent late

There's no separate bounced or insufficient_credits status — those manifest as failed with the cause in the error message.

Skipped is easy to miss

The first four statuses each get a coloured badge with an icon, and each has an entry in the status filter. Skipped doesn't. It renders as the plain lowercase word skipped in an outline badge, it isn't in the filter dropdown, and it isn't counted in the summary tiles at the top of the page.

So when you're chasing "why didn't this reminder go out?", leave the filter on All Statuses and read the rows. Filtering by Failed will not show you a skipped one.

"Send now"

A scheduled row exposes a manual Send now action that fires immediately instead of waiting for the cron — useful when a customer asks for the reminder right now. Note that only scheduled rows can be sent now; failed rows aren't retryable through this path (the action explicitly rejects any row whose status isn't scheduled). To re-attempt a failed send, schedule a fresh one-off.

The vehicle's Reminders tab

Workshop Settings isn't the only place these logs appear. Every vehicle detail page has a Reminders tab showing the same log rows filtered to that vehicle, which is usually the faster answer when a customer rings about one specific car.

It's also the version your front desk can actually reach: it needs jobcards.view rather than the settings.view that Workshop Settings demands, and it isn't plan-gated, so it works on Essentials. With jobcards.edit you can send now, cancel, and create from there too.

Retention

Logs are retained indefinitely. They're cheap (one row per send, no attachments) so there's no automatic pruning.

Related

Was this article helpful?