API reference · Core resources
Animal patients. Each patient belongs to one client (owner) and can be linked to consultations.
Guides:Patients and clientsSync patients from a practice system
A patient with its owner (client) embedded. Returned by the endpoints that read or create a single patient.
idstringrequiredPatient id (UUID), generated by Vetnio.
namestringrequirednullableThe animal's name. Free text; Vetnio does not enforce uniqueness. null when not recorded.
speciesstringrequirednullableSpecies, free text. The Vetnio web app stores the English species name, followed by - <breed> when a breed is chosen (for example Dog or Dog - Labrador Retriever); patients synced from a practice-management system may use that system's values. null when not recorded.
breedstringrequirednullableBreed, free text. null when not recorded.
dateOfBirthstringrequirednullableDate of birth (YYYY-MM-DD), or null when not recorded.
genderstringrequirednullableSex and neuter status, free text. The Vetnio web app uses Male, Female, Male Neutered and Female Neutered; use the same values so the patient list's gender filter and the UI stay consistent. null when not recorded.
weightstringrequirednullableBody weight as free text including the unit, as the web app writes it (for example 24.5 kg). Not parsed or converted. null when not recorded.
identifierstringrequirednullableThe animal's identifier, typically a microchip (transponder) number, but it can be a tattoo, registration number or practice-management-system id. Free text, not unique; matched by the patient list search. null when not recorded.
insurancestringrequirednullableName of the animal's insurance company, free text. null when the animal is uninsured or it is not recorded.
clientIdstringrequirednullableId of the owner (client). Patients created through the API always have one (an empty placeholder owner when no owner details were given); null only for patients created without an owner by other flows.
createdAtstringrequirednullableWhen the patient was created (ISO-8601). May be null for very old records.
updatedAtstringrequirednullableWhen the patient was last changed (ISO-8601). Set on every update, even one that changes nothing, and by practice-management-system syncs.
clientobjectrequirednullableThe patient's owner, embedded. null when clientId is null.
idstringrequiredClient id (UUID), generated by Vetnio.
namestringrequirednullableThe owner's full name, free text. null when not recorded, for example for the placeholder owner created with a patient that had no owner details.
addressstringrequirednullableThe owner's street address, free text. null when not recorded.
zipCodestringrequirednullableThe owner's postal code, free text. null when not recorded.
phoneNumbersarray of stringsrequiredThe owner's phone numbers, stored as given (no normalisation). E.164 format such as +46701234567 is recommended. Empty array when none are recorded.
emailstringrequirednullableThe owner's email address. Stored as given; the format is not validated. null when not recorded.
{
"id": "e8d11510-1181-42a2-9f68-7fdf015fb7f4",
"name": "Bella",
"species": "Dog",
"breed": "Labrador Retriever",
"dateOfBirth": "2021-04-12",
"gender": "Female",
"weight": "28.4 kg",
"identifier": "752098100123456",
"insurance": null,
"clientId": "1f4ce3b4-6ac9-468e-83c1-e003f7f06499",
"createdAt": "2026-10-04T16:07:19.313Z",
"updatedAt": "2026-10-04T16:07:19.313Z",
"client": {
"id": "1f4ce3b4-6ac9-468e-83c1-e003f7f06499",
"name": "Alex Morgan",
"address": null,
"zipCode": null,
"phoneNumbers": [
"+46 70 123 45 67"
],
"email": "alex.morgan@example.com"
}
}POST/workspaces/{workspaceId}/consultations/{consultationId}/patient
Sets the consultation's patient. A consultation has at most one patient, so this replaces any patient already linked; the consultation then appears in that patient's history. Only the patient link changes (the owner, title and notes are untouched). Repeating the call with the same patient is harmless. Returns 404 when the consultation or the patient does not exist in the workspace and 403 when the consultation is archived. There is no unlink endpoint in the REST API.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the workspace (clinic) that owns the patients and clients. The caller must be a member of it; patients and clients are shared by all members of the workspace.
consultationIdstringrequiredConsultation (UUID) to link the patient to. Must be in the workspace and not archived.
patientIdstringrequiredPatient (UUID) in the same workspace to link to the consultation.
successbooleanrequiredAlways true; failures are returned as errors.
curl -X POST "https://vetnio.com/api/v2/workspaces/demo-north-clinic/consultations/bc0cf418-6503-46eb-9828-c83f8c193426/patient" \
-H "Authorization: Bearer $VETNIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"patientId": "e8d11510-1181-42a2-9f68-7fdf015fb7f4"
}'{
"success": true
}POST/workspaces/{workspaceId}/patients
Creates a patient and, always, a new owner (client) for it: the client object fills in the owner's details, and omitting it creates an empty placeholder owner. An existing client cannot be reused through this endpoint. All fields are optional and stored as given. Returns the patient with the new owner embedded.
Not idempotent and not deduplicated: Vetnio does not check for an existing patient with the same name or identifier, so repeating the call creates another patient and owner. Search the patient list by identifier first if duplicates matter. An invalid dateOfBirth fails with 500 and may leave the new owner behind without a patient.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the workspace (clinic) that owns the patients and clients. The caller must be a member of it; patients and clients are shared by all members of the workspace.
namestringoptionalThe animal's name. Free text; Vetnio does not enforce uniqueness.
speciesstringoptionalSpecies, free text. The Vetnio web app stores the English species name, followed by - <breed> when a breed is chosen (for example Dog or Dog - Labrador Retriever); patients synced from a practice-management system may use that system's values.
breedstringoptionalBreed, free text.
dateOfBirthstringoptionalDate of birth as an ISO-8601 calendar date (YYYY-MM-DD). Stored as a date, so other formats are rejected by the database.
genderstringoptionalSex and neuter status, free text. The Vetnio web app uses Male, Female, Male Neutered and Female Neutered; use the same values so the patient list's gender filter and the UI stay consistent.
weightstringoptionalBody weight as free text including the unit, as the web app writes it (for example 24.5 kg). Not parsed or converted.
identifierstringoptionalThe animal's identifier, typically a microchip (transponder) number, but it can be a tattoo, registration number or practice-management-system id. Free text, not unique; matched by the patient list search.
insurancestringoptionalName of the animal's insurance company, free text.
clientobjectoptionalDetails for the new owner created with the patient. When omitted, an owner with no details is created.
namestringoptionalThe owner's full name, free text.
emailstringoptionalThe owner's email address. Stored as given; the format is not validated.
addressstringoptionalThe owner's street address, free text.
zipCodestringoptionalThe owner's postal code, free text.
phoneNumbersarray of stringsoptionalThe owner's phone numbers, stored as given (no normalisation). E.164 format such as +46701234567 is recommended. Defaults to an empty list.
idstringrequiredPatient id (UUID), generated by Vetnio.
namestringrequirednullableThe animal's name. Free text; Vetnio does not enforce uniqueness. null when not recorded.
speciesstringrequirednullableSpecies, free text. The Vetnio web app stores the English species name, followed by - <breed> when a breed is chosen (for example Dog or Dog - Labrador Retriever); patients synced from a practice-management system may use that system's values. null when not recorded.
breedstringrequirednullableBreed, free text. null when not recorded.
dateOfBirthstringrequirednullableDate of birth (YYYY-MM-DD), or null when not recorded.
genderstringrequirednullableSex and neuter status, free text. The Vetnio web app uses Male, Female, Male Neutered and Female Neutered; use the same values so the patient list's gender filter and the UI stay consistent. null when not recorded.
weightstringrequirednullableBody weight as free text including the unit, as the web app writes it (for example 24.5 kg). Not parsed or converted. null when not recorded.
identifierstringrequirednullableThe animal's identifier, typically a microchip (transponder) number, but it can be a tattoo, registration number or practice-management-system id. Free text, not unique; matched by the patient list search. null when not recorded.
insurancestringrequirednullableName of the animal's insurance company, free text. null when the animal is uninsured or it is not recorded.
clientIdstringrequirednullableId of the owner (client). Patients created through the API always have one (an empty placeholder owner when no owner details were given); null only for patients created without an owner by other flows.
createdAtstringrequirednullableWhen the patient was created (ISO-8601). May be null for very old records.
updatedAtstringrequirednullableWhen the patient was last changed (ISO-8601). Set on every update, even one that changes nothing, and by practice-management-system syncs.
clientobjectrequirednullableThe patient's owner, embedded. null when clientId is null.
idstringrequiredClient id (UUID), generated by Vetnio.
namestringrequirednullableThe owner's full name, free text. null when not recorded, for example for the placeholder owner created with a patient that had no owner details.
addressstringrequirednullableThe owner's street address, free text. null when not recorded.
zipCodestringrequirednullableThe owner's postal code, free text. null when not recorded.
phoneNumbersarray of stringsrequiredThe owner's phone numbers, stored as given (no normalisation). E.164 format such as +46701234567 is recommended. Empty array when none are recorded.
emailstringrequirednullableThe owner's email address. Stored as given; the format is not validated. null when not recorded.
curl -X POST "https://vetnio.com/api/v2/workspaces/demo-north-clinic/patients" \
-H "Authorization: Bearer $VETNIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Bella",
"species": "Dog",
"breed": "Labrador Retriever",
"dateOfBirth": "2021-04-12",
"gender": "Female",
"weight": "28.4 kg",
"identifier": "752098100123456",
"client": {
"name": "Alex Morgan",
"email": "alex.morgan@example.com",
"phoneNumbers": [
"+46 70 123 45 67"
]
}
}'{
"id": "e8d11510-1181-42a2-9f68-7fdf015fb7f4",
"name": "Bella",
"species": "Dog",
"breed": "Labrador Retriever",
"dateOfBirth": "2021-04-12",
"gender": "Female",
"weight": "28.4 kg",
"identifier": "752098100123456",
"insurance": null,
"clientId": "1f4ce3b4-6ac9-468e-83c1-e003f7f06499",
"createdAt": "2026-10-04T16:07:19.313Z",
"updatedAt": "2026-10-04T16:07:19.313Z",
"client": {
"id": "1f4ce3b4-6ac9-468e-83c1-e003f7f06499",
"name": "Alex Morgan",
"address": null,
"zipCode": null,
"phoneNumbers": [
"+46 70 123 45 67"
],
"email": "alex.morgan@example.com"
}
}GET/workspaces/{workspaceId}/patients
Returns one page of the workspace's patients, each with its owner's name. Combine searchQuery (a case-insensitive substring of the patient name, identifier or owner name) with the optional filters; all supplied conditions must match. Ordered by sort, newest first by default. Paginate with page and pageSize and use totalCount to know when to stop. Every workspace member can list all patients.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the workspace (clinic) that owns the patients and clients. The caller must be a member of it; patients and clients are shared by all members of the workspace.
pageintegeroptional1-based page number. A page past the end returns an empty patients array.
Default 1 · ≥ 1 · ≤ 9007199254740991
pageSizeintegeroptionalPatients per page, 1 to 100.
Default 20 · ≥ 1 · ≤ 100
searchQuerystringoptionalCase-insensitive substring matched against the patient name, the patient identifier (for example a microchip number) and the owner's name. Up to 200 characters, used as typed (not trimmed); % and _ act as wildcards. Species is not searched; use speciesFilter.
at most 200 characters
speciesFilterstringoptionalSpecies to filter by, case-insensitive. A known species name in any language Vetnio supports (for example Dog, dog or Hund) matches every stored spelling of that species, with or without a - <breed> suffix. Any other value must match the stored species exactly (case-insensitive), optionally followed by - <breed>.
insuranceFilterstringoptionalInsurance company name; must match the stored value exactly, ignoring case.
genderFilterstringoptionalSex value; must match the stored value exactly, ignoring case (for example Female Neutered does not match Female).
hasWeightFilterenumoptionalFilter on whether a weight is recorded:
yes — only patients with a non-empty weight.no — only patients without a weight.
Omit to include both.sortenumoptionalOrder of the results (default date_added):
date_added — newest patients first.last_visit — patients with the most recent consultation first; patients without consultations last.name — alphabetical by name, case-insensitive; patients without a name last.
Ties are broken by newest first.patientsarray of objectsrequiredThe patients on the requested page, in the requested order. Empty when the page is past the end.
idstringrequiredPatient id (UUID).
namestringrequirednullableThe animal's name, or null.
speciesstringrequirednullableSpecies as stored (see Patient.species), or null.
breedstringrequirednullableBreed, or null.
dateOfBirthstringrequirednullableDate of birth (YYYY-MM-DD), or null.
genderstringrequirednullableSex and neuter status as stored, or null.
weightstringrequirednullableBody weight as stored, including the unit, or null.
identifierstringrequirednullableIdentifier such as a microchip number, or null.
insurancestringrequirednullableInsurance company name, or null.
clientIdstringrequirednullableId of the owner (client), or null.
clientNamestringrequirednullableThe owner's name, included so a list can be shown without fetching each client. null when there is no owner or the owner has no name.
createdAtstringrequirednullableWhen the patient was created (ISO-8601), or null for very old records.
updatedAtstringrequirednullableWhen the patient was last changed (ISO-8601).
totalCountnumberrequiredNumber of patients matching the search and filters across all pages. The number of pages is ceil(totalCount / pageSize).
curl "https://vetnio.com/api/v2/workspaces/demo-north-clinic/patients?searchQuery=Bella&pageSize=10" \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"patients": [
{
"id": "e8d11510-1181-42a2-9f68-7fdf015fb7f4",
"name": "Bella",
"species": "Dog",
"breed": "Labrador Retriever",
"dateOfBirth": "2021-04-12",
"gender": "Female",
"weight": "29.1 kg",
"identifier": "752098100123456",
"insurance": null,
"clientId": "1f4ce3b4-6ac9-468e-83c1-e003f7f06499",
"clientName": "Alex Morgan",
"createdAt": "2026-10-04T16:07:19.313Z",
"updatedAt": "2026-10-04T16:07:19.478Z"
},
{
"id": "30369b53-b2dd-40c8-909a-ce259c18ed96",
"name": "Bella",
"species": "Dog",
"breed": "Labrador Retriever",
"dateOfBirth": "2021-04-12",
"gender": "Female",
"weight": "29.1 kg",
"identifier": "752098100123456",
"insurance": null,
"clientId": "553985ea-1156-4183-bb11-7225cddaa8c6",
"clientName": "Alex Morgan",
"createdAt": "2026-10-04T16:06:39.279Z",
"updatedAt": "2026-10-04T16:06:39.379Z"
}
],
"totalCount": 2
}GET/workspaces/{workspaceId}/patients/{patientId}
Returns one patient with its owner (client) embedded. Returns 404 when no patient with this id exists in the workspace. Consultation history is not included; consultations reference the patient through their patientId.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the workspace (clinic) that owns the patients and clients. The caller must be a member of it; patients and clients are shared by all members of the workspace.
patientIdstringrequiredPatient id (UUID) in this workspace. Unknown ids and ids from other workspaces return 404.
idstringrequiredPatient id (UUID), generated by Vetnio.
namestringrequirednullableThe animal's name. Free text; Vetnio does not enforce uniqueness. null when not recorded.
speciesstringrequirednullableSpecies, free text. The Vetnio web app stores the English species name, followed by - <breed> when a breed is chosen (for example Dog or Dog - Labrador Retriever); patients synced from a practice-management system may use that system's values. null when not recorded.
breedstringrequirednullableBreed, free text. null when not recorded.
dateOfBirthstringrequirednullableDate of birth (YYYY-MM-DD), or null when not recorded.
genderstringrequirednullableSex and neuter status, free text. The Vetnio web app uses Male, Female, Male Neutered and Female Neutered; use the same values so the patient list's gender filter and the UI stay consistent. null when not recorded.
weightstringrequirednullableBody weight as free text including the unit, as the web app writes it (for example 24.5 kg). Not parsed or converted. null when not recorded.
identifierstringrequirednullableThe animal's identifier, typically a microchip (transponder) number, but it can be a tattoo, registration number or practice-management-system id. Free text, not unique; matched by the patient list search. null when not recorded.
insurancestringrequirednullableName of the animal's insurance company, free text. null when the animal is uninsured or it is not recorded.
clientIdstringrequirednullableId of the owner (client). Patients created through the API always have one (an empty placeholder owner when no owner details were given); null only for patients created without an owner by other flows.
createdAtstringrequirednullableWhen the patient was created (ISO-8601). May be null for very old records.
updatedAtstringrequirednullableWhen the patient was last changed (ISO-8601). Set on every update, even one that changes nothing, and by practice-management-system syncs.
clientobjectrequirednullableThe patient's owner, embedded. null when clientId is null.
idstringrequiredClient id (UUID), generated by Vetnio.
namestringrequirednullableThe owner's full name, free text. null when not recorded, for example for the placeholder owner created with a patient that had no owner details.
addressstringrequirednullableThe owner's street address, free text. null when not recorded.
zipCodestringrequirednullableThe owner's postal code, free text. null when not recorded.
phoneNumbersarray of stringsrequiredThe owner's phone numbers, stored as given (no normalisation). E.164 format such as +46701234567 is recommended. Empty array when none are recorded.
emailstringrequirednullableThe owner's email address. Stored as given; the format is not validated. null when not recorded.
curl "https://vetnio.com/api/v2/workspaces/demo-north-clinic/patients/e8d11510-1181-42a2-9f68-7fdf015fb7f4" \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"id": "e8d11510-1181-42a2-9f68-7fdf015fb7f4",
"name": "Bella",
"species": "Dog",
"breed": "Labrador Retriever",
"dateOfBirth": "2021-04-12",
"gender": "Female",
"weight": "28.4 kg",
"identifier": "752098100123456",
"insurance": null,
"clientId": "1f4ce3b4-6ac9-468e-83c1-e003f7f06499",
"createdAt": "2026-10-04T16:07:19.313Z",
"updatedAt": "2026-10-04T16:07:19.313Z",
"client": {
"id": "1f4ce3b4-6ac9-468e-83c1-e003f7f06499",
"name": "Alex Morgan",
"address": null,
"zipCode": null,
"phoneNumbers": [
"+46 70 123 45 67"
],
"email": "alex.morgan@example.com"
}
}PATCH/workspaces/{workspaceId}/patients/{patientId}
Updates the fields present in the body and leaves omitted fields unchanged. Fields cannot be set to null; send an empty string to blank a text field (not dateOfBirth, where an empty or invalid value fails with 500). The owner cannot be changed here. Repeating the same request leaves the same data, but updatedAt is refreshed on every call. Returns 404 when the patient does not exist in the workspace. Patients synced from a practice-management system can be overwritten by the next sync.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the workspace (clinic) that owns the patients and clients. The caller must be a member of it; patients and clients are shared by all members of the workspace.
patientIdstringrequiredPatient id (UUID) in this workspace. Unknown ids and ids from other workspaces return 404.
namestringoptionalNew value for the name. The animal's name. Free text; Vetnio does not enforce uniqueness.
speciesstringoptionalNew value for the species. Species, free text. The Vetnio web app stores the English species name, followed by - <breed> when a breed is chosen (for example Dog or Dog - Labrador Retriever); patients synced from a practice-management system may use that system's values.
breedstringoptionalNew value for the breed. Breed, free text.
dateOfBirthstringoptionalNew date of birth. Date of birth as an ISO-8601 calendar date (YYYY-MM-DD). Stored as a date, so other formats are rejected by the database.
genderstringoptionalNew value for sex and neuter status. Sex and neuter status, free text. The Vetnio web app uses Male, Female, Male Neutered and Female Neutered; use the same values so the patient list's gender filter and the UI stay consistent.
weightstringoptionalNew weight. Body weight as free text including the unit, as the web app writes it (for example 24.5 kg). Not parsed or converted.
identifierstringoptionalNew identifier. The animal's identifier, typically a microchip (transponder) number, but it can be a tattoo, registration number or practice-management-system id. Free text, not unique; matched by the patient list search.
insurancestringoptionalNew insurance company. Name of the animal's insurance company, free text.
successbooleanrequiredAlways true; failures are returned as errors.
curl -X PATCH "https://vetnio.com/api/v2/workspaces/demo-north-clinic/patients/e8d11510-1181-42a2-9f68-7fdf015fb7f4" \
-H "Authorization: Bearer $VETNIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"weight": "29.1 kg"
}'{
"success": true
}DELETE/workspaces/{workspaceId}/patients/{patientId}
Permanently deletes the patient and the files uploaded to its patient record. Consultations linked to the patient are kept, with their recordings, transcripts and notes, but are no longer linked to any patient. The owner (client) is not deleted. Cannot be undone. Requires the workspace admin or superadmin role (or organization admin access); other members get 403, even for an unknown id. Returns 404 when the patient does not exist, including when it was already deleted.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the workspace (clinic) that owns the patients and clients. The caller must be a member of it; patients and clients are shared by all members of the workspace.
patientIdstringrequiredPatient id (UUID) in this workspace. Unknown ids and ids from other workspaces return 404.
An empty body on success.
curl -X DELETE "https://vetnio.com/api/v2/workspaces/demo-north-clinic/patients/2ef9e6c9-51d5-4e41-98fc-b036b2a56831" \
-H "Authorization: Bearer $VETNIO_API_KEY"{}