---
title: "The computed vaccine schedule for a patient: core requirements for their species plus other vaccines on file, each with last dose, next due, and standing — the explanation behind the patient's VaccinationStatus badge (ITE-685)."
method: GET
path: "/api/Vaccinations/schedule/{patientId}"
tags: ["Vaccinations"]
---

# The computed vaccine schedule for a patient: core requirements for their species plus other vaccines on file, each with last dose, next due, and standing — the explanation behind the patient's VaccinationStatus badge (ITE-685).

`GET /api/Vaccinations/schedule/{patientId}`

## Request

- Base URL: `https://api.clinicos.vet/backend/business`
- URL: `https://api.clinicos.vet/backend/business/api/Vaccinations/schedule/{patientId}`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/docs/api/Vaccinations/schedule/:patientId/get.ts> (a function with typed inputs; its response is checked against the schema)

## Path parameters

- `patientId` string, required

## Response `200`

OK

- PatientVaccineScheduleDto: The computed vaccine schedule for one patient (ITE-685): one entry per core requirement for the patient's species (rabies collapsed to a single requirement any rabies product satisfies), plus informational entries for other vaccines the patient has doses of. The stored `Patient.VaccinationStatus` — and therefore the patient header badge — is folded from the SAME core entries, so this is the badge's explanation, not a parallel derivation.
  - `patientId` string
  - `species` string: Species the requirement set was built from (the patient's species code).
  - `overallStatus` integer
  - `entries` PatientVaccineScheduleEntryDto[]
    - `vaccineTypeId` string: The requirement's vaccine type. For the rabies entry the satisfying dose may be a different rabies product — see string? PatientVaccineScheduleEntryDto.LastDoseVaccineName.
    - `code` string
    - `name` string
    - `isCore` boolean
    - `isRabies` boolean
    - `countsTowardStatus` boolean: True for the core-requirement entries the patient badge is folded from; false for informational rows.
    - `isSpeciesMismatch` boolean: The vaccine's type is for a different species than the patient (a data-entry error — ITE-684).
    - `status` integer: Per-vaccine standing within a patient's computed schedule (ITE-685). These are the same buckets the patient-level VaccinationStatus rollup is folded from: a core entry that is VaccineScheduleEntryStatus.Missing makes the patient PartiallyVaccinated, VaccineScheduleEntryStatus.Overdue wins over everything, VaccineScheduleEntryStatus.DueSoon maps to Due. An entry with no expiration and no duration to age against counts as VaccineScheduleEntryStatus.UpToDate (open-ended protection).
    - `lastDoseDate` string, date-time, nullable
    - `lastDoseRecordId` string, nullable
    - `lastDoseVaccineName` string, nullable: Product actually given for the last dose (differs from string PatientVaccineScheduleEntryDto.Name when a rabies requirement was met by another rabies product).
    - `nextDueDate` string, date-time, nullable: When protection lapses / the next dose is due. Null = open-ended (no expiration and no duration to age against).
    - `exemptionId` string, nullable: Set when VaccineScheduleEntryStatus PatientVaccineScheduleEntryDto.Status is Skipped: the active exemption behind it (ITE-688).
    - `skipReason` string, nullable
    - `skippedAt` string, date-time, nullable
    - `skippedByName` string, nullable

## Other responses

- `404`: Not Found

## Changes

- **2026-09-02** `061f8d95e1d1`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/changes/api/Vaccinations/schedule/:patientId/get.md)

---

[API](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1.md) - [All operations](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/llms.txt) - [OpenAPI document](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/revisions/099cf36186e0?raw)
