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"
}

Additional Metadata

{
  "contract_summary": {
    "total_contracts": 410,
    "total_endpoints": 2416,
    "api_styles_used": [
      "rest"
    ]
  },
  "generated_at": "2026-03-26T06:55:53.316Z"
}