---
title: "POST /Patients"
method: POST
path: "/Patients"
tags: ["Patients"]
---

# POST /Patients

`POST /Patients`

## Request body

- CreatePatientDto — Request body for creating a new patient
  - `name` string — The patient's name
  - `species` string — The species name. Must match a valid species from GET /species endpoint.
  - `breed` string — The breed name (free text)
  - `clientId` string
  - `dateOfBirth` string, date-time, nullable
  - `isEstimatedAge` boolean
  - `color` string, nullable
  - `microchipNo` string, nullable
  - `fixed` boolean
  - `sex` string
  - `vaccinationStatus` string
  - `lastVaccinationDate` string, date-time, nullable
  - `previousVet` string, nullable
  - `previousVetPhone` string, nullable

## Response `200`

OK

- PatientResponseDto — Full patient details response
  - `id` string — Unique patient identifier
  - `name` string — The patient's name
  - `species` string — The species name. References a species from GET /species endpoint.
  - `speciesId` string, nullable — The species ID for programmatic lookups (e.g., location species restrictions).
  - `breed` string — The breed name
  - `dateOfBirth` string, date-time, nullable
  - `isEstimatedAge` boolean
  - `color` string, nullable
  - `microchipNo` string, nullable
  - `clientId` string
  - `client` ClientSummaryDto
    - `id` string
    - `firstName` string
    - `lastName` string
    - `email` string, nullable
    - `phoneNumber` string, nullable
  - `clientName` string, nullable
  - `clientPhone` string, nullable
  - `clientEmail` string, nullable
  - `fixed` boolean
  - `sex` integer
  - `vaccinationStatus` integer
  - `lastVaccinationDate` string, date-time, nullable
  - `previousVet` string, nullable
  - `previousVetPhone` string, nullable
  - `tags` TagAssignmentDto[] — Smart Tag assignments on this patient. Populated on list responses so the UI can surface tags (incl. severity-bearing alert tags) per row without an N+1 fetch; the single-patient detail page fetches tags directly via the tag-assignments endpoint.
    - `id` string
    - `tagId` string
    - `tagName` string
    - `tagColor` string, nullable
    - `tagIcon` string, nullable
    - `tagSeverity` integer
    - `entityType` string
    - `entityId` string
    - `value` string, nullable
    - `note` string, nullable
    - `assignedByUserId` string, nullable
    - `assignedByName` string, nullable
    - `assignedAt` string, date-time
  - `contacts` PatientContactDto[] — Contacts (people) related to this patient with their relationship type and per-patient permissions. Populated on the single-patient read (GET /patients/{id}); empty on list responses. The primary owner is also reflected in string PatientResponseDto.ClientId / ClientSummaryDto? PatientResponseDto.Client.
    - `id` string
    - `patientId` string
    - `clientId` string
    - `client` ClientSummaryDto
      - `id` string
      - `firstName` string
      - `lastName` string
      - `email` string, nullable
      - `phoneNumber` string, nullable
    - `relationshipType` integer — Describes who a contact (Client) is in relation to a specific patient. One contact per patient is the `PrimaryOwner`; all others are additional relationships (co-owners, agents, emergency contacts, etc.). Stored as text on `patient_contacts.relationship_type`.
    - `isPrimary` boolean
    - `permissions` string[] — The set permission flags by name (e.g. `"ApproveTreatment"`). Exposed as a list rather than the raw ContactPermissions bitmask so clients can check individual permissions without bit math.
    - `verificationMethod` integer — How a patient contact's identity was verified by clinic staff. Stored as text on `patient_contacts.verification_method`.
    - `verifiedByUserId` string, nullable
    - `verifiedAt` string, date-time, nullable
    - `verificationNotes` string, nullable
    - `displayOrder` union
      - integer
      - string, int32
    - `createdAt` string, date-time
    - `updatedAt` string, date-time
  - `createdAt` string, date-time
  - `updatedAt` string, date-time
  - `lastVisitDate` string, date-time, nullable
  - `hasActiveAppointments` boolean
  - `isDeceased` boolean — Whether the patient is deceased
  - `deceasedDate` string, date-time, nullable — Date the patient was marked as deceased
  - `isActive` boolean — Whether the patient is active (not transferred, discharged, etc.)
  - `profilePhotoUrl` string, nullable — Presigned URL (~60min) for the patient's profile photo, or null if none is set. Backed by the PatientFile flagged with IsProfilePhoto.
  - `treatmentAcceptanceRate` union — Read-only treatment-acceptance rate (0-100) over the patient's entire history: the share of decided recommended services that were performed rather than client-declined. Null when the patient has no decided services. Clinical compliance, not regulatory.
    - number, double
    - string, double
  - `treatmentAcceptanceRateRecent` union — Read-only treatment-acceptance rate (0-100) over the trailing 12 months. Null when the patient has no decided services in that window.
    - number, double
    - string, double
  - `deferredServiceCount` union — Lifetime count of deferred (client-declined) services for this patient.
    - integer
    - string, int32

---

[API](https://skmtc.net/clinicos/apis/pawthosx-business-api-v1.md) · [All operations](https://skmtc.net/clinicos/apis/pawthosx-business-api-v1/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/clinicos/pawthosx-business-api-v1/versions/a905bde4e796/schema)
