Certification Reminder Service
API Contract
REST
/api/v1/certification-reminders
8 endpoints
GET
/api/v1/certification-reminders/api/v1/certification-reminders
List all sent certification reminders with optional filters
Public
Response Example
{
"data": [
{
"id": "rem-001",
"mentor_id": "mentor-19",
"coordinator_id": "coord-03",
"threshold_days": 30,
"sent_at": "2026-03-11T08:00:00Z",
"days_remaining": 30,
"channel": "email"
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 12
}
}
GET
/api/v1/certification-reminders/api/v1/certification-reminders/:id
Get a single reminder record
Public
Response Example
{
"id": "rem-001",
"mentor_id": "mentor-19",
"coordinator_id": "coord-03",
"threshold_days": 30,
"days_remaining": 30,
"sent_at": "2026-03-11T08:00:00Z",
"channel": "email",
"status": "delivered"
}
POST
/api/v1/certification-reminders/api/v1/certification-reminders
Send a certification expiry reminder to a mentor (maps to sendExpiryReminder)
Public
Request Example
{
"mentor_id": "mentor-19",
"coordinator_id": "coord-03",
"days_remaining": 14,
"channel": "push"
}
Response Example
{
"id": "rem-002",
"mentor_id": "mentor-19",
"coordinator_id": "coord-03",
"days_remaining": 14,
"threshold_days": 14,
"channel": "push",
"sent_at": "2026-03-26T08:00:00Z",
"status": "delivered"
}
PUT
/api/v1/certification-reminders/api/v1/certification-reminders/:id
Update a reminder record (e.g. mark as acknowledged)
Public
Request Example
{
"status": "acknowledged",
"acknowledged_at": "2026-03-26T09:15:00Z"
}
Response Example
{
"id": "rem-001",
"status": "acknowledged",
"acknowledged_at": "2026-03-26T09:15:00Z",
"updated_at": "2026-03-26T09:15:00Z"
}
DELETE
/api/v1/certification-reminders/api/v1/certification-reminders/:id
Delete a reminder record
Public
Response Example
{
"deleted": true,
"id": "rem-001"
}
GET
/api/v1/certification-reminders/api/v1/certification-reminders/upcoming
Get mentors with upcoming certification expirations (maps to getUpcomingExpirations)
Public
Response Example
{
"data": [
{
"mentor_id": "mentor-19",
"mentor_name": "Lars Eriksen",
"expires_at": "2026-04-10T00:00:00Z",
"days_remaining": 15,
"reminder_already_sent": false
},
{
"mentor_id": "mentor-55",
"mentor_name": "Anita Berge",
"expires_at": "2026-04-20T00:00:00Z",
"days_remaining": 25,
"reminder_already_sent": true
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 2
}
}
POST
/api/v1/certification-reminders/api/v1/certification-reminders/check
Trigger the daily expiry check manually (maps to runDailyExpiryCheck)
Public
Request Example
{
"dry_run": false
}
Response Example
{
"run_at": "2026-03-26T08:00:00Z",
"mentors_checked": 124,
"reminders_sent": 3,
"errors": 0,
"status": "completed"
}
GET
/api/v1/certification-reminders/api/v1/certification-reminders/sent-check
Check whether a reminder has already been sent for a mentor at a given threshold (maps to hasReminderBeenSent)
Public
Response Example
{
"mentor_id": "mentor-19",
"threshold_days": 30,
"reminder_sent": true,
"sent_at": "2026-03-11T08:00:00Z"
}