Reminders
Reminders are the recurring nudges a clinic sends clients about upcoming vaccines, follow-up exams, refills, and other recurring care. Each reminder is tied to a client and patient and has a due date driven by an underlying reminder setting (the template that defined the cadence). Once a reminder fires it produces one or more reminder notifications, which are the per-channel messages (email, SMS, postcard) the clinic queues to send.
Communication and marketing integrations typically read reminders to know what’s coming due, and read notifications to know what was sent and when.
Schema
Section titled “Schema”Authoritative schemas live in the live Swagger UI. The fields below are a representative subset for orientation.
| Field | Type | Notes |
|---|---|---|
id | UUID | Server-assigned reminder identifier. |
clientId | UUID | Client the reminder is for. |
patientId | UUID | Patient the reminder is for. |
clinicId | UUID | Clinic the reminder belongs to. |
reminderSettingId | UUID | The template (cadence, message, channel set) that produced this reminder. |
dateDue | ISO 8601 | When the underlying care is due (UTC). |
dateTriggered | ISO 8601 | When the reminder fired and notifications were generated (UTC). |
isCompleted | boolean | Whether the reminder has been satisfied (e.g. the vaccine was administered). |
isDeleted | boolean | Soft-delete flag. |
dateCreated | ISO 8601 | Server-assigned creation timestamp (UTC). |
dateUpdated | ISO 8601 | Last server-side mutation (UTC). |
List reminders
Section titled “List reminders”/pav2/open-api-reminders Returns reminders for the clinic in X-Clinic-Id. Useful filters: clientIds, patientIds, dateDueFrom / dateDueTo, isCompleted, isDeleted. In a group with sharing enabled, set clinicIds to widen the query; includePatientHomeClinic=true also pulls reminders that belong to a patient’s home clinic.
Example
Section titled “Example”curl -X POST https://open-api.shepherd.vet/pav2/open-api-reminders \ -H "Content-Type: application/json" \ -H "X-Integration-Public-Key: $SHEPHERD_PUBLIC_KEY" \ -H "X-Integration-Private-Key: $SHEPHERD_PRIVATE_KEY" \ -H "X-Clinic-Id: $SHEPHERD_CLINIC_ID" \ -d '{"page":1,"rpp":100,"sort":"dateDue|asc","isCompleted":false,"dateDueFrom":"2026-05-28","dateDueTo":"2026-06-30"}'import os, requests
resp = requests.post( "https://open-api.shepherd.vet/pav2/open-api-reminders", headers={ "Content-Type": "application/json", "X-Integration-Public-Key": os.environ["SHEPHERD_PUBLIC_KEY"], "X-Integration-Private-Key": os.environ["SHEPHERD_PRIVATE_KEY"], "X-Clinic-Id": os.environ["SHEPHERD_CLINIC_ID"], }, json={ "page": 1, "rpp": 100, "sort": "dateDue|asc", "isCompleted": False, "dateDueFrom": "2026-05-28", "dateDueTo": "2026-06-30", }, timeout=30,)resp.raise_for_status()for r in resp.json()["item"]: print(r["dateDue"], r["clientId"], r["patientId"])using System.Net.Http.Json;
using var http = new HttpClient();http.DefaultRequestHeaders.Add("X-Integration-Public-Key", publicKey);http.DefaultRequestHeaders.Add("X-Integration-Private-Key", privateKey);http.DefaultRequestHeaders.Add("X-Clinic-Id", clinicId);
var body = JsonContent.Create(new { page = 1, rpp = 100, sort = "dateDue|asc", isCompleted = false, dateDueFrom = "2026-05-28", dateDueTo = "2026-06-30",});var resp = await http.PostAsync( "https://open-api.shepherd.vet/pav2/open-api-reminders", body);resp.EnsureSuccessStatusCode();Console.WriteLine(await resp.Content.ReadAsStringAsync());<?php$ch = curl_init('https://open-api.shepherd.vet/pav2/open-api-reminders');curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ 'Content-Type: application/json', 'X-Integration-Public-Key: ' . getenv('SHEPHERD_PUBLIC_KEY'), 'X-Integration-Private-Key: ' . getenv('SHEPHERD_PRIVATE_KEY'), 'X-Clinic-Id: ' . getenv('SHEPHERD_CLINIC_ID'), ], CURLOPT_POSTFIELDS => json_encode([ 'page' => 1, 'rpp' => 100, 'sort' => 'dateDue|asc', 'isCompleted' => false, 'dateDueFrom' => '2026-05-28', 'dateDueTo' => '2026-06-30', ]),]);$response = curl_exec($ch);curl_close($ch);echo $response;const resp = await fetch('https://open-api.shepherd.vet/pav2/open-api-reminders', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Integration-Public-Key': process.env.SHEPHERD_PUBLIC_KEY, 'X-Integration-Private-Key': process.env.SHEPHERD_PRIVATE_KEY, 'X-Clinic-Id': process.env.SHEPHERD_CLINIC_ID, }, body: JSON.stringify({ page: 1, rpp: 100, sort: 'dateDue|asc', isCompleted: false, dateDueFrom: '2026-05-28', dateDueTo: '2026-06-30', }),});if (!resp.ok) throw new Error(`Shepherd ${resp.status}: ${await resp.text()}`);const page = await resp.json();for (const r of page.item) console.log(r.dateDue, r.clientId, r.patientId);Response
Section titled “Response”{ "item": [ { "id": "2f3a4b5c-...", "clientId": "a1b2c3d4-...", "patientId": "8c7d6e5f-...", "clinicId": "f2a4c6e8-...", "reminderSettingId": "7e8f9a0b-...", "dateDue": "2026-06-12T00:00:00Z", "dateTriggered": "2026-05-28T08:00:00Z", "isCompleted": false, "isDeleted": false, "dateCreated": "2026-05-28T08:00:00Z", "dateUpdated": "2026-05-28T08:00:00Z" } ], "totalRecords": 1, "page": 1, "recordsPerPage": 100, "sort": "dateDue|asc", "searchQuery": null, "embed": null, "links": []}Reminder notifications
Section titled “Reminder notifications”/pav2/open-api-reminder-notifications The per-channel send records produced when a reminder fires: one notification per channel (email / SMS / postcard) per reminder. Use these to surface “what did the clinic send and when” in a marketing dashboard or to suppress duplicate sends from your own outbound stack.
curl -X POST https://open-api.shepherd.vet/pav2/open-api-reminder-notifications \ -H "Content-Type: application/json" \ -H "X-Integration-Public-Key: $SHEPHERD_PUBLIC_KEY" \ -H "X-Integration-Private-Key: $SHEPHERD_PRIVATE_KEY" \ -H "X-Clinic-Id: $SHEPHERD_CLINIC_ID" \ -d '{"page":1,"rpp":100,"sort":"dateCreated|desc"}'Reminder settings (templates)
Section titled “Reminder settings (templates)”/pav2/open-api-reminder-settings /pav2/open-api-reminder-notification-settings Reminder settings are the templates that drive how reminders are produced: which trigger (a vaccine product, an appointment type), what cadence, and which message goes out. The settings endpoint returns the template definitions; the notification-settings endpoint returns the per-channel rules (when to send the first nudge, the second, etc.). Read these to render a clinic’s reminder strategy in a configuration UI, or to map a reminder back to the rule that produced it.
curl -X POST https://open-api.shepherd.vet/pav2/open-api-reminder-settings \ -H "Content-Type: application/json" \ -H "X-Integration-Public-Key: $SHEPHERD_PUBLIC_KEY" \ -H "X-Integration-Private-Key: $SHEPHERD_PRIVATE_KEY" \ -H "X-Clinic-Id: $SHEPHERD_CLINIC_ID" \ -d '{"page":1,"rpp":100}'See also
Section titled “See also”- Clients and Patients for the ids on each reminder.
- Products for the vaccines and services that reminder settings typically trigger from.
- Groups and multi-site for how reminders behave when sharing is enabled across a group.
- Conventions for pagination, sorting, and date filters.