Skip to content

SOAP records

A SOAP record is the clinical note captured during a visit. SOAP stands for Subjective, Objective, Assessment, Plan: the four sections veterinarians use to structure their findings, from the owner’s reported history through the physical exam to the diagnosis and treatment plan.

In Shepherd, a SOAP record is typically created against an appointment ID; the appointment is the calendar anchor, the SOAP record is the clinical content. The SOAP root record carries the metadata (patient, provider, appointment, signed status); the four narrative sections plus vitals, imaging, discharge instructions, and notes are managed through dedicated sub-resource endpoints.

Authoritative schemas live in the live Swagger UI. The fields below are a representative subset for orientation.

FieldTypeDescription
idstringUnique identifier for the SOAP record.
patientIdstringThe patient (pet) seen.
titlestringShort descriptive title used in the chart timeline.
soapStatusIdstringCurrent status of the record.
supervisingDoctorIdstringThe supervising doctor.
createdByUserIdstringThe user who created the record.
soapAssignedUsersarrayUsers assigned to the record.
locationIdstringWhere in the clinic the patient is.
invoiceIdstringThe invoice this visit was billed to, when there is one.
dateCheckedInstringISO 8601 UTC check-in time.
patient / location / soapStatus / supervisingDoctorobjectExpanded related records. null unless embedded.
dateCreatedstringISO 8601 UTC timestamp of creation.
dateUpdatedstringISO 8601 UTC timestamp of last update.
dateDeletedstringWhen the record was deleted, if it was.
deletedbooleanSoft-delete flag.
POST /pav2/open-api-soaps

Returns a paginated collection of SOAP records for the clinic. Filter by patientIds (a comma-separated list, so it takes one or many) to pull a chart history for a single pet, or by the dateCreatedFrom / dateCreatedTo pair (max 1-month range) for time-series analysis. Use embed to inline related records, for example embed: "patient,appointment".

Terminal window
curl -X POST https://open-api.shepherd.vet/pav2/open-api-soaps \
-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": 25,
"sort": "dateCreated|desc",
"patientIds": "a1b2c3d4-e5f6-7890-abcd-ef0123456789",
"embed": "patient,appointment"
}'
{
"item": [
{
"id": "3f9a1c2e-18b4-4a91-a5c9-abc123456789",
"patientId": "a1b2c3d4-e5f6-7890-abcd-ef0123456789",
"title": "Annual wellness exam",
"soapStatusId": "9f8e7d6c-5b4a-3210-a9f8-fedcba098765",
"supervisingDoctorId": "5a8d0cfc-c7c4-44a0-bdab-44f4e5f6b219",
"createdByUserId": "6a5b4c3d-2e1f-0a9b-8765-4321fedcba09",
"soapAssignedUsers": [],
"locationId": "1a2b3c4d-5e6f-789a-bcde-0123456789ab",
"invoiceId": "8b1f2c3d-4e5f-6789-abcd-ef0123456789",
"dateCheckedIn": "2026-05-22T14:30:00Z",
"patient": null,
"location": null,
"soapStatus": null,
"clinicId": "9890662f-52db-4a41-a5c1-b2e300d400b4",
"dateCreated": "2026-05-22T14:35:00Z",
"dateUpdated": "2026-05-22T15:42:00Z",
"dateDeleted": null,
"deleted": false
}
],
"totalRecords": 12,
"page": 1,
"recordsPerPage": 25,
"sort": "dateCreated|desc",
"searchQuery": null,
"embed": "patient,appointment",
"links": []
}

A SOAP record itself is read only through the public API: there is no endpoint that creates, updates, or deletes a SOAP. Clinical documentation is authored by clinicians inside Shepherd, and integrations read the resulting records.

Two pieces of a visit can be written:

EndpointPurpose
POST /pav2/open-api-soap-vital-entries/writeRecord a vitals entry against a visit.
POST /pav2/open-api-soap-imaging/file-presigned-upload-url then POST /pav2/open-api-soap-imaging/file-entry-writeAttach an imaging file, using the same three-step presigned-upload flow as patient files.

Everything else in the SOAP structure (subjective, objective/physical exam, assessment, plan) is read only.

The four SOAP sections plus the related clinical content each live on their own endpoints, following the same list / write conventions as the parent resource. Pass the parent soapId when writing.

EndpointPurpose
/pav2/open-api-soap-subjectivesThe Subjective section: owner-reported history and presenting complaint.
/pav2/open-api-physical-examsThe Objective section: physical-exam findings by body system.
/pav2/open-api-soap-assessmentsThe Assessment section: diagnoses and differential list.
/pav2/open-api-soap-plan/noteFree-form notes on the Plan section.
/pav2/open-api-soap-plan/recommendationRecommendations recorded on the Plan section.
/pav2/open-api-soap-plan/treatmentThe plan’s treatment line items; covered in detail on Treatments, including the dose vs quantity semantics.
/pav2/open-api-soap-plan/treatment-noteNotes attached to individual treatments.
/pav2/open-api-soap-vital-entriesVitals captured during the visit (temperature, heart rate, weight, etc.).
/pav2/open-api-soap-imaging-notesNotes on imaging studies attached to the SOAP record.
/pav2/open-api-soap-imaging/file-presigned-upload-urlStep 1 of an imaging file upload: request a presigned S3 URL.
/pav2/open-api-soap-imaging/file-entry-writeStep 3 of an imaging file upload: register the uploaded file.
/pav2/open-api-soap-discharge-instructionsDischarge instructions printed for the client.
/pav2/open-api-soap-assessment-notesNotes attached to the Assessment section.
/pav2/open-api-soap-assessment-diagnosis-descriptionDiagnosis descriptions on the Assessment section.
  • Conventions: pagination, embed, sort, and date-range rules.
  • Treatments: the plan’s treatment line items and what dose and quantity mean.
  • Appointments: the calendar anchor most SOAP records are written against.
  • Patients: the pet whose chart the SOAP record joins.
  • Errors: HTTP status codes and the two JSON error shapes.