API reference · Core resources
Documents attached to a consultation: the clinical note, client communication, referral letter and structured documents. Read, write, generate and inspect their retained versions.
Guides:RecordsDocument a visit end to endGenerate structured documents
Metadata for one saved version of a record. Fetch its content with Read a retained record version.
versionIdstringrequiredOpaque identifier of one saved version, assigned by Vetnio's storage. Treat it as an unparsed string: it can contain characters such as +, / and =, so URL-encode it when passing it back as a query parameter.
lastModifiedstring (date-time)requirednullableWhen this version was saved, as an ISO-8601 UTC timestamp. null only if storage did not report a time.
isLatestbooleanrequiredtrue for the version that is the record's current content. All versions are false after the record has been deleted, because the deletion itself is the latest change.
changeTypeenumrequiredHow this version was saved:
generated — written by Vetnio's AI generation. Also reported when the version's metadata cannot be read, so it is not proof of AI origin.edit — saved by a person: an edit in Vetnio, a write through Create or Update a record, or a restore of an earlier version.
This says nothing about clinical approval or correctness.sizenumberrequirednullableStored size of this version in bytes, or null if unavailable. For clinical notes it includes a small amount of internal padding, so it can be larger than the byte length of content.
contentTypestringrequirednullableMedia type of the saved content: text/html for free-text records, application/json for a clinical note generated from a structured template. null if unavailable.
{
"versionId": "3HL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo",
"lastModified": "2026-10-04T09:30:00.000Z",
"isLatest": false,
"changeType": "generated",
"size": 1843,
"contentType": "text/html"
}POST/workspaces/{workspaceId}/consultations/{consultationId}/clinical-note/generate
Writes the consultation's clinical note with AI and saves it as the current version of the record (changeType: generated in version history).
First transcribes any uploaded recordings that have not been transcribed yet and waits for every recording on the consultation to finish (up to 10 minutes). Generation then uses the full transcript, the consultation's additional info and uploaded files, the selected template, the linked patient's details and earlier visits, the clinic-wide and personal writing instructions, the user's learned writing style, and the recording language. Generation itself usually takes well under a minute.
Synchronous (default): the request blocks until the note is saved and returns it in clinicalNote. If the consultation's clinical note uses a structured template, the response is message: "Structured document generation initiated" and the note is generated in the background; poll the consultation until isGeneratingClinicalNote is false, then read the record. A consultation with no transcript returns 400.
Callback (callbackUrl set): returns at once; the note or the error (including an empty transcript) is POSTed to the callback URL. Use it to avoid holding a connection open. Both modes share a 10-minute limit for the whole job, transcription wait included; a job cut off by that limit returns a gateway timeout in synchronous mode and sends no callback at all in callback mode.
Side effects: the consultation's selected template is updated when templateId is given, the consultation's AI title may be refreshed, and the consultation is marked as submitted. Not idempotent: every call runs the AI model again and adds a version. Requires a personal API key and write access to the consultation; archived consultations return 403.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the clinic (workspace), as returned by GET /workspaces. The key's user must be a member of the clinic, or an admin of the organization it belongs to.
consultationIdstringrequiredIdentifier of the consultation (UUID), as returned when it was created or by GET /workspaces/{workspaceId}/consultations. It must belong to the clinic in workspaceId.
templateIdstringoptionalID of the template (from List templates) whose sections and instructions shape the note. The template is also saved as the consultation's selected clinical-note template. When omitted, the template already selected on the consultation is used, or none if it has none. Pass auto to generate without a template and clear the selection. An ID that does not belong to this workspace is not rejected: the note is generated without a template and the selection is cleared. The template's type is not checked, so pass a Clinical Note template.
shouldGenerateFromScratchbooleanoptionalDefaults to true: write a new note from the full transcript, replacing the current one. Set false to update the existing note instead, keeping its content (including manual edits) and adding what was said in recordings transcribed since the last generation. Vetnio falls back to from-scratch when there is no existing note or when templateId names a different template than the consultation's current one.
callbackUrlstring (uri)optionalAbsolute URL (use HTTPS) that switches the request to callback mode: the response returns immediately with message: "Callback URL has been queued", and the outcome is POSTed to this URL as JSON once transcription and generation finish. Each callback has an X-Vetnio-Callback-Status header of success (body { "clinicalNote": "<html>" }; for a structured-template note the body is {} and is sent as soon as background generation starts, so read the record once isGeneratingClinicalNote is false) or error (body { "error": { "code", "message" }, "workspaceId", "consultationId" }). One attempt with a 30-second timeout and no retries; callbacks are not signed, so put a secret token in the URL if you need to authenticate them.
messagestringoptionalPresent instead of clinicalNote when the note is not returned in this response:
Callback URL has been queued — you passed callbackUrl; the outcome will be POSTed to it.Structured document generation initiated — the consultation's clinical note uses a structured template and is being generated in the background. Poll GET /workspaces/{workspaceId}/consultations/{consultationId} until isGeneratingClinicalNote is false, then read the record.clinicalNotestringoptionalThe generated clinical note as HTML, returned in synchronous mode for free-text notes. Generated notes use <strong> section headings, <br /> line breaks and • bullet characters rather than heading, paragraph or list elements. The note has already been saved as the consultation's clinical note.
curl -X POST "https://vetnio.com/api/v2/workspaces/furunculotic-loud-chihuahua/consultations/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clinical-note/generate" \
-H "Authorization: Bearer $VETNIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"templateId": "3f6c2a1e-8b4d-4c7a-9e21-5d0b7f9a6c13",
"shouldGenerateFromScratch": false,
"callbackUrl": "https://pms.example.com/webhooks/vetnio/clinical-note?token=9f2c7e"
}'{
"message": "Callback URL has been queued",
"clinicalNote": "<strong>History</strong><br />Bella, an 8-year-old Labrador, has had intermittent left hind lameness for 2 weeks.<br /><br /><strong>Examination</strong><br />• T 38.6 °C<br />• Mild pain on extension of the left stifle<br /><br /><strong>Plan</strong><br />• Carprofen 2 mg/kg PO q12h for 7 days<br />• Recheck in 14 days"
}POST/workspaces/{workspaceId}/consultations/{consultationId}/documents
Extracts the consultation into a JSON object that follows a JSON template's schema, for example to fill the fields of a practice-management system's journal entry.
First transcribes any uploaded recordings that have not been transcribed yet and waits for every recording on the consultation to finish (up to 10 minutes). The document is generated from the transcript and the consultation's additional info only: prompt templates, uploaded files, patient history and personal writing style are not used. Values are plain text taken from what was said; fields the conversation did not cover are left empty rather than invented.
The result is stored as the consultation's latest generated document, separately from the clinical note: it does not change the record returned by Get a record, and it cannot be read back through this API, so keep the response or callback body. Calling again generates and stores a new document.
Synchronous (default): blocks until the document is ready and returns it. A consultation with no transcript returns 400.
Callback (callbackUrl set): returns at once; the document or the error (including an empty transcript) is POSTed to the callback URL. Use it to avoid holding a connection open. Both modes share a 10-minute limit for the whole job, transcription wait included; a job cut off by that limit returns a gateway timeout in synchronous mode and sends no callback at all in callback mode.
An unknown jsonTemplateId returns 404 in both modes, before anything is generated. Requires a personal API key and write access to the consultation; archived consultations return 403. Not idempotent: every call runs the AI model again.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the clinic (workspace), as returned by GET /workspaces. The key's user must be a member of the clinic, or an admin of the organization it belongs to.
consultationIdstringrequiredIdentifier of the consultation (UUID), as returned when it was created or by GET /workspaces/{workspaceId}/consultations. It must belong to the clinic in workspaceId.
jsonTemplateIdstringrequiredID of the JSON template (structured template) whose schema the document must follow, from List JSON templates. Must be one of this workspace's JSON templates or a built-in one; otherwise 404.
callbackUrlstring (uri)optionalAbsolute URL (use HTTPS) that switches the request to callback mode: the response returns immediately with message: "Callback URL has been queued", and the outcome is POSTed to this URL as JSON once transcription and generation finish. Each callback has an X-Vetnio-Callback-Status header of success (body: the document object) or error (body { "error": { "code", "message" }, "workspaceId", "consultationId" }). One attempt with a 30-second timeout and no retries; callbacks are not signed, so put a secret token in the URL if you need to authenticate them.
languageCodeenumoptionalLanguage to write the document in, as a recording-language code (mostly ISO 639-1, for example sv, en, de, no; a few three-letter codes such as yue or fil). The transcript can be in another language. When omitted, the consultation's recording language is used; if the consultation has none, the model chooses.
Possible values:svenafamarhyasastazbebnbsbgmyyuecacebnyzhhrcsdanletfilfifrffgllgkadeelguhahehihuisigidgaitjajvkeaknkkkmkokukylolvlnltluolbmkmsmlmtmimrmnnensonoocorpsfaplptparorusrsnsdskslsoesswtltatgtethtrukumburuzvicywoxhzu
An empty body on success.
curl -X POST "https://vetnio.com/api/v2/workspaces/furunculotic-loud-chihuahua/consultations/a1b2c3d4-e5f6-7890-abcd-ef1234567890/documents" \
-H "Authorization: Bearer $VETNIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jsonTemplateId": "2a859133-0e04-4f63-88d2-aa0ee318cd8d",
"callbackUrl": "https://pms.example.com/webhooks/vetnio/document?token=9f2c7e",
"languageCode": "sv"
}'{
"anamnesis": "Intermittent left hind lameness for 2 weeks; worse after exercise.",
"examination": "T 38.6 °C. Mild pain on extension of the left stifle.",
"treatment": "Carprofen 2 mg/kg PO q12h for 7 days. Recheck in 14 days."
}POST/workspaces/{workspaceId}/consultations/{consultationId}/records
Writes or generates the consultation's clinical note or client communication. A consultation holds one record per type, so if a record of this type already exists it is replaced; the replaced content stays available as a retained version.
With content: the content is sanitized and saved as a manual edit (changeType: edit in version history). This behaves exactly like Update a record.
Without content: Vetnio generates the record from scratch with AI and the request blocks until it is saved, usually well under a minute. Generation uses the consultation's current transcript, additional info, uploaded files, the template selected on the consultation, and the user's and clinic's writing instructions. Unlike Generate a clinical note, this does not wait for recordings that are still being transcribed, so call it only after the consultation's transcriptionStatus is completed. If there is no transcript or uploaded file to work from, no error is returned: the existing record is kept, or a short "no information found" message in the recording language is saved. When the clinical note uses a structured template, the request returns as soon as background generation has started.
Requires a personal API key and write access to the consultation; archived consultations return 403. Not idempotent: every call writes a new version, and every generation calls the AI model again.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the clinic (workspace), as returned by GET /workspaces. The key's user must be a member of the clinic, or an admin of the organization it belongs to.
consultationIdstringrequiredIdentifier of the consultation (UUID), as returned when it was created or by GET /workspaces/{workspaceId}/consultations. It must belong to the clinic in workspaceId.
recordTypeenumrequiredWhich of the consultation's records to write. A consultation holds at most one record of each type, so the type identifies the record.
clinical note — the medical record of the visit (the Clinical note tab in Vetnio).communication — the client communication: an owner-facing summary or message about the visit.
Referral letters can be read with Get a record but not created, replaced or deleted through this API.contentstringoptionalThe record body as HTML (plain text is accepted). When present and not blank, it is saved as a manual edit and no AI runs. When omitted, empty or whitespace-only, Vetnio generates the record with AI instead. Unsafe markup is removed before saving, and clinical notes are normalized to the note editor's format (paragraphs become <br /> line breaks, tables are flattened to text). At most 50,000 characters.
successbooleanrequiredAlways true when the request succeeds; failures are returned as an HTTP error status instead. When the clinical note is generated from a structured template, true means generation has started, not that the note is ready.
curl -X POST "https://vetnio.com/api/v2/workspaces/demo-north-clinic/consultations/bc0cf418-6503-46eb-9828-c83f8c193426/records" \
-H "Authorization: Bearer $VETNIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"recordType": "communication",
"content": "<p>Hi Alex,</p><p>Bella had her annual vaccination today and is in good health.</p>"
}'{
"success": true
}GET/workspaces/{workspaceId}/consultations/{consultationId}/records
Returns the current content of one of the consultation's records: the clinical note, the client communication or the referral letter. Records have no IDs of their own; a consultation holds at most one record of each type, selected with recordType.
The body is the content itself, not an envelope: an HTML string for free-text records, a JSON object (one key per field) for a clinical note generated from a structured template, or null when no record of this type exists.
Any workspace member who can open the consultation can read its records, including on archived consultations. Requires a personal API key; organization and clinic export keys are rejected with 403. An unknown consultation, or one outside the workspace, returns 404.
Reading has no side effects. While a record is being generated this returns the previous content (or null) until the new version is saved; poll the consultation's isGeneratingClinicalNote / isGeneratingCommunication flags to know when generation has finished. Earlier saved versions are available from List retained record versions.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the clinic (workspace), as returned by GET /workspaces. The key's user must be a member of the clinic, or an admin of the organization it belongs to.
consultationIdstringrequiredIdentifier of the consultation (UUID), as returned when it was created or by GET /workspaces/{workspaceId}/consultations. It must belong to the clinic in workspaceId.
recordTypeenumrequiredWhich of the consultation's records to read. A consultation holds at most one record of each type, so the type identifies the record. The values contain a space; URL-encode them in query strings (clinical%20note).
clinical note — the medical record of the visit (the Clinical note tab in Vetnio). HTML, or a JSON object when it was generated from a structured template.communication — the client communication: an owner-facing summary or message about the visit. HTML.referral — the referral letter to or from another clinic. HTML.bodystring or anyrequiredThe current content of the record, in the format it was saved in. An HTML string for free-text records (every client communication and referral letter, and clinical notes written without a structured template). A JSON object with one key per template field for a clinical note generated from a structured template. null when the consultation has no record of this type, because none has been generated or written yet or because it was deleted.
curl "https://vetnio.com/api/v2/workspaces/demo-north-clinic/consultations/bc0cf418-6503-46eb-9828-c83f8c193426/records?recordType=communication" \
-H "Authorization: Bearer $VETNIO_API_KEY""<p>Hi Alex,</p><p>Bella had her annual vaccination today and is in good health. Her next booster is due in October 2027.</p>"PUT/workspaces/{workspaceId}/consultations/{consultationId}/records
Replaces the consultation's clinical note or client communication with the supplied content, creating the record if it does not exist yet. This is a full replacement: send the whole body. The write is saved as a manual edit (changeType: edit in version history) and the previous content stays available as a retained version.
A manual edit does not lock the record: a later AI generation for the same record type creates a new version on top of it (in update mode the edited text is used as the starting point; in from-scratch mode it is replaced). When the edited record was originally generated from a transcript, Vetnio may learn from the difference to adapt the user's personal writing style.
There is no concurrency check on this endpoint; the last write wins. Content written here is always stored as HTML, so it cannot replace a structured-template clinical note with a JSON document.
Requires a personal API key and write access to the consultation; archived consultations return 403. Idempotent in effect (the same body yields the same content), but each call adds a version.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the clinic (workspace), as returned by GET /workspaces. The key's user must be a member of the clinic, or an admin of the organization it belongs to.
consultationIdstringrequiredIdentifier of the consultation (UUID), as returned when it was created or by GET /workspaces/{workspaceId}/consultations. It must belong to the clinic in workspaceId.
recordTypeenumrequiredWhich of the consultation's records to write. A consultation holds at most one record of each type, so the type identifies the record.
clinical note — the medical record of the visit (the Clinical note tab in Vetnio).communication — the client communication: an owner-facing summary or message about the visit.
Referral letters can be read with Get a record but not created, replaced or deleted through this API.contentstringrequiredThe complete new record body as HTML (plain text is accepted). It replaces the current content entirely; there are no partial updates. Unsafe markup (scripts, styles, attributes other than link href/name/target) is removed. Clinical notes are also normalized to the note editor's format: paragraphs become <br /> line breaks and tables are flattened to text. At most 50,000 characters. An empty string saves an empty version, after which Get a record returns null.
successbooleanrequiredAlways true when the request succeeds; failures are returned as an HTTP error status instead.
curl -X PUT "https://vetnio.com/api/v2/workspaces/demo-north-clinic/consultations/bc0cf418-6503-46eb-9828-c83f8c193426/records" \
-H "Authorization: Bearer $VETNIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"recordType": "communication",
"content": "<p>Hi Alex,</p><p>Bella had her annual vaccination today and is in good health. Her next booster is due in October 2027.</p>"
}'{
"success": true
}DELETE/workspaces/{workspaceId}/consultations/{consultationId}/records
Removes the consultation's current clinical note or client communication. Afterwards Get a record returns null and the consultation no longer counts as having that record.
This is not an erasure. Previously saved versions remain in the record's history and can still be listed and read with the record version endpoints; they are only destroyed when the consultation itself is permanently erased. Deleting the clinical note does not delete a separate document produced by Generate a structured document.
Deleting a record that does not exist succeeds without changing anything, so the call is idempotent. Referral letters cannot be deleted through this API. Requires a personal API key and write access to the consultation; archived consultations return 403.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the clinic (workspace), as returned by GET /workspaces. The key's user must be a member of the clinic, or an admin of the organization it belongs to.
consultationIdstringrequiredIdentifier of the consultation (UUID), as returned when it was created or by GET /workspaces/{workspaceId}/consultations. It must belong to the clinic in workspaceId.
recordTypeenumrequiredWhich of the consultation's records to write. A consultation holds at most one record of each type, so the type identifies the record.
clinical note — the medical record of the visit (the Clinical note tab in Vetnio).communication — the client communication: an owner-facing summary or message about the visit.
Referral letters can be read with Get a record but not created, replaced or deleted through this API.successbooleanrequiredAlways true when the request succeeds, including when the consultation had no record of this type to delete.
curl -X DELETE "https://vetnio.com/api/v2/workspaces/demo-north-clinic/consultations/bc0cf418-6503-46eb-9828-c83f8c193426/records?recordType=communication" \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"success": true
}GET/workspaces/{workspaceId}/consultations/{consultationId}/records/version
Returns the full saved content and metadata of one version of the consultation's clinical note, client communication or referral letter. The version is looked up only within this consultation and record type.
The content of a given versionId never changes; currentVersionId and version.isLatest describe the record at the time of the request. Reading a version is read-only: it does not restore it.
Requires a personal API key whose user can read the consultation; organization and clinic export keys are rejected with 403. Returns 404 if the consultation or the version does not exist.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the clinic (workspace), as returned by GET /workspaces. The key's user must be a member of the clinic, or an admin of the organization it belongs to.
consultationIdstringrequiredIdentifier of the consultation (UUID), as returned when it was created or by GET /workspaces/{workspaceId}/consultations. It must belong to the clinic in workspaceId.
recordTypeenumrequiredWhich of the consultation's records the history belongs to. The values contain a space; URL-encode them in query strings (clinical%20note).
clinical note — the medical record of the visit.communication — the client communication sent to the animal owner.referral — the referral letter to or from another clinic.versionIdstringrequiredversionId of the version to read, exactly as returned by List retained record versions. URL-encode it: it can contain +, / and =.
at least 1 characters
currentVersionIdstringrequirednullableversionId of the record's current content at the time of this request, so you can tell whether the requested version is still current. null when the record has been deleted.
versionobjectrequiredMetadata of the requested version.
versionIdstringrequiredOpaque identifier of one saved version, assigned by Vetnio's storage. Treat it as an unparsed string: it can contain characters such as +, / and =, so URL-encode it when passing it back as a query parameter.
lastModifiedstring (date-time)requirednullableWhen this version was saved, as an ISO-8601 UTC timestamp. null only if storage did not report a time.
isLatestbooleanrequiredtrue for the version that is the record's current content. All versions are false after the record has been deleted, because the deletion itself is the latest change.
changeTypeenumrequiredHow this version was saved:
generated — written by Vetnio's AI generation. Also reported when the version's metadata cannot be read, so it is not proof of AI origin.edit — saved by a person: an edit in Vetnio, a write through Create or Update a record, or a restore of an earlier version.
This says nothing about clinical approval or correctness.sizenumberrequirednullableStored size of this version in bytes, or null if unavailable. For clinical notes it includes a small amount of internal padding, so it can be larger than the byte length of content.
contentTypestringrequirednullableMedia type of the saved content: text/html for free-text records, application/json for a clinical note generated from a structured template. null if unavailable.
contentstringrequiredThe exact content of this version as saved: an HTML string, or a JSON document serialized as a string for a structured-template clinical note (parse it yourself). It never changes for a given versionId.
curl "https://vetnio.com/api/v2/workspaces/demo-north-clinic/consultations/bc0cf418-6503-46eb-9828-c83f8c193426/records/version?recordType=communication&versionId=6724a0b7bb9b7b414919bb8d2b161ae8" \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"currentVersionId": "6724a0b7bb9b7b414919bb8d2b161ae8",
"version": {
"versionId": "6724a0b7bb9b7b414919bb8d2b161ae8",
"lastModified": "2026-10-04T16:07:20.000Z",
"isLatest": true,
"changeType": "edit",
"size": 124,
"contentType": "text/html"
},
"content": "<p>Hi Alex,</p><p>Bella had her annual vaccination today and is in good health. Her next booster is due in October 2027.</p>"
}GET/workspaces/{workspaceId}/consultations/{consultationId}/records/versions
Lists the saved versions of the consultation's clinical note, client communication or referral letter, newest first, with timestamps and whether each was AI-generated or saved by a person. Use it with Read a retained record version to compare the AI draft with the clinician's corrections.
Every generation, manual edit, API write and restore adds a version. Versions survive Delete a record and are only destroyed when the consultation is permanently erased. The list is complete and not paginated.
This is a history of saved content, not an audit trail: it does not say who made a change or what changed between versions, and keystrokes between saves are not captured. Listing and reading are separate requests, so a save in between can make currentVersionId and isLatest stale.
Requires a personal API key whose user can read the consultation; organization and clinic export keys are rejected with 403. An unknown consultation returns 404; a consultation that never had this record returns an empty versions array. Structured documents from Generate a structured document and transcript history are not included.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the clinic (workspace), as returned by GET /workspaces. The key's user must be a member of the clinic, or an admin of the organization it belongs to.
consultationIdstringrequiredIdentifier of the consultation (UUID), as returned when it was created or by GET /workspaces/{workspaceId}/consultations. It must belong to the clinic in workspaceId.
recordTypeenumrequiredWhich of the consultation's records the history belongs to. The values contain a space; URL-encode them in query strings (clinical%20note).
clinical note — the medical record of the visit.communication — the client communication sent to the animal owner.referral — the referral letter to or from another clinic.currentVersionIdstringrequirednullableversionId of the record's current content. null when the record does not exist or has been deleted; older versions can still be listed in that case.
versionsarray of objectsrequiredEvery retained version of the record, newest first, in one unpaginated list. Empty when the consultation has never had a record of this type. Deletions are not listed as versions.
versionIdstringrequiredOpaque identifier of one saved version, assigned by Vetnio's storage. Treat it as an unparsed string: it can contain characters such as +, / and =, so URL-encode it when passing it back as a query parameter.
lastModifiedstring (date-time)requirednullableWhen this version was saved, as an ISO-8601 UTC timestamp. null only if storage did not report a time.
isLatestbooleanrequiredtrue for the version that is the record's current content. All versions are false after the record has been deleted, because the deletion itself is the latest change.
changeTypeenumrequiredHow this version was saved:
generated — written by Vetnio's AI generation. Also reported when the version's metadata cannot be read, so it is not proof of AI origin.edit — saved by a person: an edit in Vetnio, a write through Create or Update a record, or a restore of an earlier version.
This says nothing about clinical approval or correctness.sizenumberrequirednullableStored size of this version in bytes, or null if unavailable. For clinical notes it includes a small amount of internal padding, so it can be larger than the byte length of content.
contentTypestringrequirednullableMedia type of the saved content: text/html for free-text records, application/json for a clinical note generated from a structured template. null if unavailable.
curl "https://vetnio.com/api/v2/workspaces/demo-north-clinic/consultations/bc0cf418-6503-46eb-9828-c83f8c193426/records/versions?recordType=communication" \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"currentVersionId": "6724a0b7bb9b7b414919bb8d2b161ae8",
"versions": [
{
"versionId": "6724a0b7bb9b7b414919bb8d2b161ae8",
"lastModified": "2026-10-04T16:07:20.000Z",
"isLatest": true,
"changeType": "edit",
"size": 124,
"contentType": "text/html"
},
{
"versionId": "6724a0b7bf30fd172c1df7d2d53084ae",
"lastModified": "2026-10-04T16:07:20.000Z",
"isLatest": false,
"changeType": "edit",
"size": 83,
"contentType": "text/html"
}
]
}