Skip to content

Clinics

A clinic is the tenancy boundary of the Shepherd API. Almost every other call operates against exactly one clinic, named by the X-Clinic-Id header (see Authentication). This endpoint lists the clinics your integration keys can reach, so it is usually the first call you make: it is where you discover the clinic UUID to put in X-Clinic-Id, and the groupId that ties a clinic into a multi-site group.

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

FieldTypeDescription
idstringUnique identifier for the clinic. This is the value you send in X-Clinic-Id.
namestringClinic display name.
groupIdstringIdentifier of the group the clinic belongs to, or null for a standalone clinic. See Groups and multi-site.
emailstringPrimary clinic email address.
phonestringPrimary clinic phone number.
faxstringClinic fax number.
smsNumberstringThe clinic’s SMS number.
clinicAddressobjectThe clinic’s postal address. There are no flat address fields on the clinic itself.
clinicSettingobjectAdditional clinic configuration.
taxRatenumberTax rate applied to the clinic’s services.
infostringFree-text additional information.
dateCreatedstringISO 8601 UTC timestamp of creation.
dateUpdatedstringISO 8601 UTC timestamp of last update.
POST /pav2/open-api-clinics

Returns a paginated collection of the clinics your keys can access. Accepts the standard collection parameters: page, rpp, sort, embed, and a searchQuery that matches on clinic name and contact details. Because this endpoint is not clinic-scoped, you can call it with just your two integration keys. See Conventions for the full parameter rules.

Terminal window
curl -X POST https://open-api.shepherd.vet/pav2/open-api-clinics \
-H "Content-Type: application/json" \
-H "X-Integration-Public-Key: $SHEPHERD_PUBLIC_KEY" \
-H "X-Integration-Private-Key: $SHEPHERD_PRIVATE_KEY" \
-d '{
"page": 1,
"rpp": 25,
"sort": "name|asc"
}'
{
"item": [
{
"id": "9890662f-52db-4a41-a5c1-b2e300d400b4",
"name": "Riverside Animal Hospital",
"groupId": "3c7d1e9a-4b52-4f83-9d61-7a2b8c4e5f60",
"email": "front-desk@riverside.example.com",
"phone": "5555550100",
"fax": "5555550101",
"smsNumber": "5555550102",
"clinicAddress": null,
"clinicSetting": null,
"taxRate": 8.25,
"info": null,
"dateCreated": "2025-11-02T16:40:00Z",
"dateUpdated": "2026-04-18T12:05:00Z"
}
],
"totalRecords": 3,
"page": 1,
"recordsPerPage": 25,
"sort": "name|asc",
"links": []
}

Two fields on each clinic record drive the rest of your integration:

  • id is the value you put in X-Clinic-Id for every clinic-scoped call.
  • groupId tells you whether the clinic rolls up to a multi-location operator. If it is set, call POST /pav2/open-api-groups to read the group’s isMultiSite flag and its data-sharing settings before you decide how to pull data across locations.
  • Authentication: the three required headers and the per-clinic scope model.
  • Groups and multi-site: how groupId, sharing flags, and clinicIds change what you see.
  • Errors: HTTP status codes and the common failure states, including the X-Clinic-Id header.
  • Conventions: pagination, embed, sort, and date-range rules.