Concepts
Data model
How organizations, clinics, consultations, recordings, records, patients and templates relate, and the identifiers you will store.
Vetnio models a veterinary clinic's day. A vet records a visit, Vetnio transcribes it and writes the clinical note, the message to the owner and, when needed, a referral letter. Every object in the API maps to something a clinic sees in the app, so the vocabulary below is the same one clinic staff use in the user manual.
The objects at a glance
- Organization: an optional group of clinics, such as a clinic chain. Organization admins can work in every clinic of the group, and organization keys can export usage across it.
- Workspace: one clinic. Every clinical resource belongs to exactly one workspace, and almost every URL starts with
/workspaces/{workspaceId}. A user can belong to several workspaces, with a role in each.- Client: an animal owner. A client owns one or more patients.
- Patient: an animal.
- Consultation: one visit. It optionally links to one patient and holds everything produced for the visit:
- Recordings: audio segments you upload. Vetnio joins them in order.
- Transcript: the text Vetnio produces from the recordings, plus any text you add.
- Uploaded files: lab results, referral letters, images or spreadsheets whose content Vetnio extracts.
- Additional info: free-text context that is added to every document Vetnio writes for the visit.
- Records: the documents for the visit. Each record type has one current version and a retained history.
- Template: instructions that control how Vetnio writes a free-text record.
- Structured template: a set of typed fields that Vetnio fills to produce a form-like document.
- VetsGPT chat: a conversation with the clinical assistant, private by default. Its owner can share it with selected clinic members.
- Client: an animal owner. A client owns one or more patients.
How a visit flows through the API
- You create a consultation, optionally passing your own visit ID as
externalId. - You upload one or more recordings to pre-signed storage URLs, then start transcription.
- Vetnio transcribes the audio and marks the consultation ready for generation.
- You generate the clinical note (or let a clinician do it in the app) and read the records back.
- You link the patient so the visit appears in the animal's history.
Document a visit end to end walks through each call. Steps 2 to 4 are asynchronous; Consultations explains the status fields you poll.
Records
A record is a document attached to a consultation, identified by its type rather than its own ID:
| Record type | In the app | Written by |
|---|---|---|
clinical note | Clinical note | Vetnio from the transcript and template, or your own content |
communication | Client communication (the message to the owner) | Vetnio, or your own content |
referral | Referral letter | Vetnio in the app; read-only over the API |
Free-text records are HTML. A consultation can also hold a structured document produced from a structured template. Every write keeps the previous version, which you can list and read back. Records covers content formats and version history.
Identifiers
Store the identifiers you need to come back to an object. They never change for the life of the object.
| Object | Format | Example | Where you get it |
|---|---|---|---|
| Workspace | Readable slug | furunculotic-loud-chihuahua | GET/workspaces |
| Consultation | UUID | 71476b24-7171-496a-bf4d-23ad157a0e09 | Returned on creation |
| Your visit ID | Your own string | pims-visit-10482 | You choose it (externalId) |
| Client, patient | UUID | 553985ea-1156-4183-bb11-7225cddaa8c6 | Returned on creation |
| Recording | <milliseconds>-<language> | 1791129741217-en | Embedded in each upload URL |
| Uploaded file | UUID (fileName) | 8f1c4a60-7e3b-4b6f-9a9d-6d9f3c8b2e4a | POST/workspaces/{workspaceId}/consultations/{consultationId}/uploaded-files |
| Record | Consultation ID + record type | clinical note | You choose the type |
| Record version | Opaque string | 6724a0c11696518c069a24c7368c8afb | The record's version history |
| Template, structured template | UUID | acf5c844-9762-4be9-9a89-e113f5c6e3df | GET/workspaces/{workspaceId}/templates, GET/workspaces/{workspaceId}/json-templates |
| VetsGPT chat | UUID (chat_id) | f67e44b8-2755-46dd-a95b-f22eb643270b | POST/workspaces/{workspaceId}/vetsgpt/chats |
Who can see what
The API acts as the user who owns the key, with that user's role in each clinic:
- Any member of a clinic can read and write its clients, patients, consultations and records, whoever created them. Organization admins have the same access to every clinic in their organization.
- Exporting a clinic's clinical data requires a clinic admin or an organization admin.
- Audio is private to the user who recorded it unless the clinic shares recordings.
- VetsGPT chats are visible to their owner and explicitly invited current clinic members. Admins have no automatic access. Use VetsGPT explains viewing, contributing and owner-only actions.
- Organization and clinic keys are read-only keys for usage reporting: they can call the organization and usage export endpoints and nothing else. Authentication lists exactly what each key type can do.
Conventions you will see everywhere
- Request and response bodies are JSON. Free-text documents are HTML strings inside that JSON.
- Timestamps are ISO-8601 strings in UTC, such as
2026-10-04T16:02:21.208Z. - Field names are camelCase. VetsGPT chat objects are the exception and use snake_case (
chat_id,created_at), as returned by the chat service. - Deleting a consultation archives it; it stays readable by ID. Deleting a client also deletes its patients.
Next steps
- Consultations: lifecycle, status fields and visibility.
- Records and Templates: what Vetnio writes and how you control it.
- Patients and clients: owners and animals.
Endpoints used in this guide
- GET
/workspacesList workspaces - POST
/workspaces/{workspaceId}/consultationsCreate a new consultation - GET
/workspaces/{workspaceId}/consultations/{consultationId}Get consultation details - POST
/workspaces/{workspaceId}/consultations/{consultationId}/patientLink a patient to a consultation - GET
/workspaces/{workspaceId}/consultations/{consultationId}/recordsGet a record - POST
/workspaces/{workspaceId}/consultations/{consultationId}/uploaded-filesInitialize a file upload - GET
/workspaces/{workspaceId}/templatesList templates - GET
/workspaces/{workspaceId}/json-templatesList JSON templates - POST
/workspaces/{workspaceId}/vetsgpt/chatsCreate a VetsGPT chat
Last reviewed against the API on 2026-10-30.