API reference · Core resources
A consultation is one visit. It is the container for its recordings, transcript, uploaded files, linked patient and generated records.
Status view of a single consultation: name, audio duration, transcription state and document-generation flags.
idstringrequiredConsultation ID (UUID), generated by Vetnio when the consultation is created.
namestringrequiredDisplay name of the consultation. Free text set at creation or via PATCH .../consultations/{consultationId}; may be an empty string.
createdAtstringrequiredWhen the consultation was created, as an ISO-8601 UTC timestamp.
recordingDurationInMillisecondsnumberrequiredTotal length of all audio uploaded to the consultation, in milliseconds, including silence. Vetnio's audio processor updates it shortly after each upload; it is 0 until the first upload has been processed.
recordingDurationInMillisecondsExcludingSilencenumberrequirednullableSame as recordingDurationInMilliseconds, but with silent stretches (quieter than -40 dB) removed. 0 until the first upload has been processed.
isGeneratingClinicalNotebooleanrequiredtrue while Vetnio is generating the clinical note for this consultation; set back to false when generation ends. Poll it to detect when a requested note is ready.
isGeneratingCommunicationbooleanrequiredtrue while Vetnio is generating the owner communication (the client-facing summary) for this consultation; set back to false when generation ends.
isReadyForGenerationbooleanrequiredtrue when document generation can start: no uploaded recording is still waiting for transcription, and the consultation has transcript text, a text partial transcription or an analyzed uploaded file. Recordings that failed permanently do not block readiness. Always false for archived consultations.
clinicalNoteJsonTemplateIdstringrequirednullableID of the JSON (structured document) template bound to this consultation's clinical note, or null if none is bound. Set automatically when the selected clinical note template is linked to a JSON template; fetch that template's schema to render a structured note.
linkEntryIdintegerrequirednullableID of the journal entry this consultation was exported to in the Link practice-management system, or null if it has not been exported to Link. Only used by clinics with the Link integration.
≥ -9007199254740991 · ≤ 9007199254740991
linkJournalIdintegerrequirednullableID of the Link journal (the animal's journal) that holds linkEntryId, or null. Combine with linkEntryId to build a deep link into Link.
≥ -9007199254740991 · ≤ 9007199254740991
transcriptionStatusenumrequiredOverall state of audio transcription for the consultation. Poll this after POST .../transcriptions/start; stop polling on completed or failed.
idle — no audio recording has been uploaded yet (text added as a partial transcription does not change this).processing — at least one uploaded recording is not transcribed yet. This includes recordings uploaded before transcription was started: the status does not advance until POST .../transcriptions/start (or a transcript wait) runs.completed — every uploaded recording has been transcribed (recordings shorter than one second count as transcribed with no text).failed — nothing is pending, but at least one recording failed permanently; see transcriptionFailureReason. Text from the other recordings is still in the transcript.transcriptionFailureReasonenumrequirednullableWhy a recording failed permanently, when transcriptionStatus is failed; otherwise null.
unreadable_recording — the uploaded file is empty or is not decodable audio.processing_failed — audio processing kept failing and the retries are used up.transcription_failed — the speech-to-text providers rejected the audio.{
"id": "bc0cf418-6503-46eb-9828-c83f8c193426",
"name": "Bella - vaccination",
"createdAt": "2026-10-04T16:07:19.616Z",
"recordingDurationInMilliseconds": 0,
"recordingDurationInMillisecondsExcludingSilence": 0,
"isGeneratingClinicalNote": false,
"isGeneratingCommunication": false,
"isReadyForGeneration": false,
"clinicalNoteJsonTemplateId": null,
"linkEntryId": null,
"linkJournalId": null,
"transcriptionStatus": "idle",
"transcriptionFailureReason": null
}POST/workspaces/{workspaceId}/consultations
Creates a consultation owned by the authenticated user and returns a presigned URL for uploading its first audio recording.
With externalId, the call is an upsert: if an active consultation in the workspace already has that externalId, it is returned unchanged (with a fresh upload URL) and nothing is created. Without externalId or clientConsultationId, every call creates a new consultation, so retrying a request that timed out can create duplicates. With clientConsultationId, retries return the consultation the first request created, and an ID that belongs to another consultation returns 409.
Creating a consultation does not record or transcribe anything. Next steps: PUT audio to recordingUploadUrl, then call POST .../transcriptions/start. The first consultation in a workspace that is waiting to start its free trial starts the trial.
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.
clientConsultationIdstring (uuid)optionalClient-generated UUID that makes creation idempotent. Retrying with the same ID returns the consultation the original request created for the same workspace and user; an ID that belongs to any other consultation returns 409. With externalId, an existing consultation for that externalId still takes precedence, and the ID is used when a new consultation is created.
matches `^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$`
namestringrequiredDisplay name for the consultation, typically the patient's name and the reason for the visit. Free text; not validated (an empty string is accepted).
recordingLanguageCodestringrequiredLanguage spoken in the consultation, as a lowercase ISO 639 code such as en, sv or de, optionally followed by subtags (pt-BR). Stored on the consultation and embedded in the returned upload URL's recording ID, which sets the transcription language of that first recording. A value that is not a two- or three-letter code with optional subtags returns 400; use a supported language code.
matches `^(?:[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*)?$`
externalIdstringoptionalIdentifier of the matching visit in your practice-management system. If an active (not archived or deleted) consultation in this workspace already has this externalId, that consultation is returned unchanged instead of creating a new one, whoever created it; name and recordingLanguageCode are then not applied. When externalId is set, clinicalNoteTemplateId is ignored, even if a new consultation is created.
clinicalNoteTemplateIdstringoptionalID of the clinical note template to use when generating this consultation's note. An unknown ID, or auto, is ignored and the consultation is created without a template. If the template is linked to a JSON template, that structured template is bound as well. Ignored when externalId is provided.
consultationIdstringrequiredID of the consultation that was created, or of the existing consultation returned because its externalId matched.
recordingUploadUrlstring (uri)requiredPresigned URL for uploading the first audio recording with PUT (raw bytes as the body), valid for 24 hours. It behaves exactly like a URL from GET .../recording-upload-url: its recording ID is fixed now, so upload promptly and fetch a new URL for each further segment.
consultationobjectrequiredSummary of the created (or matched) consultation. Fetch GET .../consultations/{consultationId} for status fields.
idstringrequiredConsultation ID (UUID); same as consultationId.
namestringrequiredDisplay name. When an existing consultation was returned, this is its stored name, not the name in the request.
createdAtstringrequiredWhen the consultation was created, as an ISO-8601 UTC timestamp.
recordingDurationInMillisecondsnumberrequiredTotal length of all audio uploaded to the consultation, in milliseconds, including silence. Vetnio's audio processor updates it shortly after each upload; it is 0 until the first upload has been processed. 0 for a new consultation.
uploadedRecordingDurationInMillisecondsnumberrequiredSame value as recordingDurationInMilliseconds.
isGeneratingClinicalNotebooleanrequiredtrue while Vetnio is generating the clinical note for this consultation; set back to false when generation ends. Poll it to detect when a requested note is ready.
isGeneratingCommunicationbooleanrequiredtrue while Vetnio is generating the owner communication (the client-facing summary) for this consultation; set back to false when generation ends.
externalIdstringrequirednullableIdentifier of the matching visit or consultation in the clinic's practice-management system, or null if the consultation is not linked to one. Free text; not unique.
curl -X POST "https://vetnio.com/api/v2/workspaces/demo-north-clinic/consultations" \
-H "Authorization: Bearer $VETNIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Bella - vaccination",
"recordingLanguageCode": "en",
"externalId": "pims-visit-1791130039569"
}'{
"consultationId": "bc0cf418-6503-46eb-9828-c83f8c193426",
"recordingUploadUrl": "https://storage.example.com/recordings/demo-north-clinic/bc0cf418-6503-46eb-9828-c83f8c193426/1791130039623-en?X-Amz-Expires=86400&X-Amz-Signature=…",
"consultation": {
"id": "bc0cf418-6503-46eb-9828-c83f8c193426",
"name": "Bella - vaccination",
"createdAt": "2026-10-04T16:07:19.616Z",
"recordingDurationInMilliseconds": 0,
"uploadedRecordingDurationInMilliseconds": 0,
"isGeneratingClinicalNote": false,
"isGeneratingCommunication": false,
"externalId": "pims-visit-1791130039569"
}
}GET/workspaces/{workspaceId}/consultations
Returns a paginated list of the consultations the authenticated user created in this workspace. Colleagues' consultations are never listed, even when the workspace lets members see each other's consultations in the Vetnio app; they can still be read by ID. Archived consultations and consultations deleted in the app are excluded.
Each item carries metadata (name, dates, audio duration, template IDs, generation flags) and searchableContent, a plain-text copy of the latest clinical note. Use GET .../records for the formatted note.
Results are ordered by creation date, newest first. Consultations linked in a timeline (follow-up visits) are kept together and count as one entry toward consultationsPerPage and count. Use searchQuery to filter by name, clinical note text, external ID or patient name/identifier (case-insensitive substring match). Pagination is offset-based, so items can shift between pages while consultations are being created.
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.
currentPagenumberoptionalPage to return, starting at 1. Defaults to 1. Must be 1 or greater; lower values cause a server error.
Default 1
consultationsPerPagenumberoptionalPage size, counted in entries (a timeline of linked consultations is one entry). Defaults to 10. No maximum is enforced, but large pages are slow because each row checks for stored notes.
Default 10
searchQuerystringoptionalCase-insensitive substring filter matched against the consultation name, the plain text of its clinical note, its externalId, and the linked patient's name or identifier. Surrounding whitespace is ignored; omit or send an empty value for no filter.
consultationsarray of objectsrequiredConsultations on the requested page. Consultations that belong to the same timeline (a series of follow-up visits) are returned together and count as one entry toward the page size, so a page can hold more items than consultationsPerPage.
idstringrequiredConsultation ID (UUID).
workspaceIdstringrequiredID of the workspace (clinic) that owns the consultation.
creatorIdstringrequiredUser ID of the person who created the consultation. Always the caller for this endpoint.
namestringrequiredDisplay name of the consultation; may be an empty string.
aiTitlestringoptionalnullableSeparate AI-generated title describing the consultation, refreshed after clinical-note saves when automatic naming is enabled. May be null when no title is generated or when the workspace uses generated titles as consultation names instead.
createdAtstringrequiredWhen the consultation was created, as an ISO-8601 UTC timestamp. The list is sorted by this value, newest first.
recordingLanguageCodestringoptionalnullableLanguage code chosen when the consultation was created (for example sv, en, de). Each uploaded recording carries its own language code, which is what transcription uses.
recordingDurationInMillisecondsnumberrequiredTotal length of all audio uploaded to the consultation, in milliseconds, including silence. Vetnio's audio processor updates it shortly after each upload; it is 0 until the first upload has been processed. Same value as uploadedRecordingDurationInMilliseconds.
uploadedRecordingDurationInMillisecondsnumberrequiredTotal length of all audio uploaded to the consultation, in milliseconds, including silence. Vetnio's audio processor updates it shortly after each upload; it is 0 until the first upload has been processed.
isGeneratingClinicalNotebooleanrequiredtrue while Vetnio is generating the clinical note for this consultation; set back to false when generation ends. Poll it to detect when a requested note is ready.
isGeneratingCommunicationbooleanrequiredtrue while Vetnio is generating the owner communication (the client-facing summary) for this consultation; set back to false when generation ends.
hasClinicalNotebooleanrequiredtrue when a clinical note has been saved for the consultation (generated or written manually).
hasCommunicationbooleanrequiredtrue when an owner communication has been saved for the consultation.
discussionStatusstringoptionalnullableLegacy field kept for backward compatibility. Current consultations always report missing; do not rely on it.
ratingenumoptionalnullableLegacy feedback field that current Vetnio clients no longer set; normally null.
like — the user rated the consultation output positively.dislike — the user rated it negatively.ratingReasonstringoptionalnullableLegacy free-text reason for rating; normally null.
clinicalNoteTemplateIdstringoptionalnullableID of the template used to generate the clinical note, or null when none is selected.
communicationTemplateIdstringoptionalnullableID of the template used to generate the owner communication, or null when none is selected.
referralTemplateIdstringoptionalnullableID of the template used to generate a referral letter, or null when none is selected.
clinicalNoteJsonTemplateIdstringoptionalnullableID of the JSON (structured document) template bound to the clinical note, or null.
isGeneratingReferralbooleanoptionaltrue while a referral letter is being generated for this consultation.
lastTranscribedRecordingIdstringoptionalnullableRecording ID (<epoch-ms>-<language>) of the latest recording included in the transcript, or null if nothing has been transcribed. Recordings whose ID sorts at or before this value are treated as already transcribed.
lastSubmittedRecordingIdstringoptionalnullableValue of lastTranscribedRecordingId when the user last submitted the consultation for note generation in the Vetnio app. A different lastTranscribedRecordingId means audio was added since; null if never submitted.
uploadedRecordingDurationInMillisecondsExcludingSilencenumberoptionalSame as recordingDurationInMilliseconds, but with silent stretches (quieter than -40 dB) removed. 0 until the first upload has been processed.
clientIdstringoptionalnullableID of the client (pet owner) linked directly to the consultation by some practice-management integrations; usually null. Prefer patientId and the patient's owner.
patientIdstringoptionalnullableID of the patient linked to the consultation, or null if no patient is linked.
isDeletedbooleanoptionalWhether the consultation is archived. Always false here because archived consultations are excluded from this list.
isHiddenbooleanoptionalWhether the consultation was deleted (moved out of view) in the Vetnio app. Always false here because such consultations are excluded.
recordingDurationInMillisecondsExcludingSilencenumberoptionalSame as recordingDurationInMilliseconds, but with silent stretches (quieter than -40 dB) removed. 0 until the first upload has been processed. Same value as uploadedRecordingDurationInMillisecondsExcludingSilence.
searchableContentstringoptionalnullablePlain-text copy of the latest saved clinical note (HTML tags removed, whitespace collapsed, at most 100,000 characters), kept for search. null until a clinical note is saved. Use GET .../records for the formatted note.
externalIdstringoptionalnullableIdentifier of the matching visit or consultation in the clinic's practice-management system, or null if the consultation is not linked to one. Free text; not unique.
countnumberrequiredNumber of matching entries across all pages, where a timeline of linked consultations counts once.
itemsPerPagenumberrequiredEcho of the requested consultationsPerPage.
totalPagesnumberrequiredNumber of pages, ceil(count / itemsPerPage); 0 when nothing matches.
curl "https://vetnio.com/api/v2/workspaces/demo-north-clinic/consultations?currentPage=1&consultationsPerPage=2" \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"consultations": [
{
"id": "bc0cf418-6503-46eb-9828-c83f8c193426",
"workspaceId": "demo-north-clinic",
"creatorId": "c1b0f2a0-f819-5fcc-a2ed-85db0cef66a7",
"name": "Bella - annual vaccination",
"aiTitle": null,
"createdAt": "2026-10-04T16:07:19.616Z",
"recordingLanguageCode": "en",
"recordingDurationInMilliseconds": 0,
"uploadedRecordingDurationInMilliseconds": 0,
"isGeneratingClinicalNote": false,
"isGeneratingCommunication": false,
"hasClinicalNote": false,
"hasCommunication": false,
"discussionStatus": "missing",
"rating": null,
"ratingReason": null,
"clinicalNoteTemplateId": null,
"communicationTemplateId": null,
"referralTemplateId": null,
"clinicalNoteJsonTemplateId": null,
"isGeneratingReferral": false,
"lastTranscribedRecordingId": null,
"lastSubmittedRecordingId": null,
"uploadedRecordingDurationInMillisecondsExcludingSilence": 0,
"clientId": null,
"patientId": "e8d11510-1181-42a2-9f68-7fdf015fb7f4",
"isDeleted": false,
"isHidden": false,
"recordingDurationInMillisecondsExcludingSilence": 0,
"searchableContent": null,
"externalId": "pims-visit-10482"
},
{
"id": "71476b24-7171-496a-bf4d-23ad157a0e09",
"workspaceId": "demo-north-clinic",
"creatorId": "c1b0f2a0-f819-5fcc-a2ed-85db0cef66a7",
"name": "Bella - vaccination",
"aiTitle": null,
"createdAt": "2026-10-04T16:02:21.208Z",
"recordingLanguageCode": "en",
"recordingDurationInMilliseconds": 0,
"uploadedRecordingDurationInMilliseconds": 0,
"isGeneratingClinicalNote": false,
"isGeneratingCommunication": false,
"hasClinicalNote": false,
"hasCommunication": false,
"discussionStatus": "missing",
"rating": null,
"ratingReason": null,
"clinicalNoteTemplateId": null,
"communicationTemplateId": null,
"referralTemplateId": null,
"clinicalNoteJsonTemplateId": null,
"isGeneratingReferral": false,
"lastTranscribedRecordingId": null,
"lastSubmittedRecordingId": null,
"uploadedRecordingDurationInMillisecondsExcludingSilence": 0,
"clientId": null,
"patientId": null,
"isDeleted": false,
"isHidden": false,
"recordingDurationInMillisecondsExcludingSilence": 0,
"searchableContent": null,
"externalId": "pims-visit-10482"
}
],
"count": 3,
"itemsPerPage": 2,
"totalPages": 2
}GET/workspaces/{workspaceId}/consultations/{consultationId}
Returns the status of one consultation: name, uploaded audio duration, transcription state and document-generation flags. This is the endpoint to poll while waiting for work to finish: after POST .../transcriptions/start, poll until transcriptionStatus is completed or failed; after requesting a clinical note, poll until isGeneratingClinicalNote is false.
Any member of the workspace can read any consultation in it, including consultations created by colleagues and archived consultations. Returns 404 if the consultation does not exist in this workspace. Fields such as externalId, template IDs and the linked patient are not included here; they are returned by GET .../consultations.
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.
idstringrequiredConsultation ID (UUID), generated by Vetnio when the consultation is created.
namestringrequiredDisplay name of the consultation. Free text set at creation or via PATCH .../consultations/{consultationId}; may be an empty string.
createdAtstringrequiredWhen the consultation was created, as an ISO-8601 UTC timestamp.
recordingDurationInMillisecondsnumberrequiredTotal length of all audio uploaded to the consultation, in milliseconds, including silence. Vetnio's audio processor updates it shortly after each upload; it is 0 until the first upload has been processed.
recordingDurationInMillisecondsExcludingSilencenumberrequirednullableSame as recordingDurationInMilliseconds, but with silent stretches (quieter than -40 dB) removed. 0 until the first upload has been processed.
isGeneratingClinicalNotebooleanrequiredtrue while Vetnio is generating the clinical note for this consultation; set back to false when generation ends. Poll it to detect when a requested note is ready.
isGeneratingCommunicationbooleanrequiredtrue while Vetnio is generating the owner communication (the client-facing summary) for this consultation; set back to false when generation ends.
isReadyForGenerationbooleanrequiredtrue when document generation can start: no uploaded recording is still waiting for transcription, and the consultation has transcript text, a text partial transcription or an analyzed uploaded file. Recordings that failed permanently do not block readiness. Always false for archived consultations.
clinicalNoteJsonTemplateIdstringrequirednullableID of the JSON (structured document) template bound to this consultation's clinical note, or null if none is bound. Set automatically when the selected clinical note template is linked to a JSON template; fetch that template's schema to render a structured note.
linkEntryIdintegerrequirednullableID of the journal entry this consultation was exported to in the Link practice-management system, or null if it has not been exported to Link. Only used by clinics with the Link integration.
≥ -9007199254740991 · ≤ 9007199254740991
linkJournalIdintegerrequirednullableID of the Link journal (the animal's journal) that holds linkEntryId, or null. Combine with linkEntryId to build a deep link into Link.
≥ -9007199254740991 · ≤ 9007199254740991
transcriptionStatusenumrequiredOverall state of audio transcription for the consultation. Poll this after POST .../transcriptions/start; stop polling on completed or failed.
idle — no audio recording has been uploaded yet (text added as a partial transcription does not change this).processing — at least one uploaded recording is not transcribed yet. This includes recordings uploaded before transcription was started: the status does not advance until POST .../transcriptions/start (or a transcript wait) runs.completed — every uploaded recording has been transcribed (recordings shorter than one second count as transcribed with no text).failed — nothing is pending, but at least one recording failed permanently; see transcriptionFailureReason. Text from the other recordings is still in the transcript.transcriptionFailureReasonenumrequirednullableWhy a recording failed permanently, when transcriptionStatus is failed; otherwise null.
unreadable_recording — the uploaded file is empty or is not decodable audio.processing_failed — audio processing kept failing and the retries are used up.transcription_failed — the speech-to-text providers rejected the audio.curl "https://vetnio.com/api/v2/workspaces/demo-north-clinic/consultations/bc0cf418-6503-46eb-9828-c83f8c193426" \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"id": "bc0cf418-6503-46eb-9828-c83f8c193426",
"name": "Bella - vaccination",
"createdAt": "2026-10-04T16:07:19.616Z",
"recordingDurationInMilliseconds": 0,
"recordingDurationInMillisecondsExcludingSilence": 0,
"isGeneratingClinicalNote": false,
"isGeneratingCommunication": false,
"isReadyForGeneration": false,
"clinicalNoteJsonTemplateId": null,
"linkEntryId": null,
"linkJournalId": null,
"transcriptionStatus": "idle",
"transcriptionFailureReason": null
}PATCH/workspaces/{workspaceId}/consultations/{consultationId}
Changes the display name of a consultation. Only name can be changed through this endpoint. Any member of the workspace can rename any consultation in it. Returns 403 for archived consultations and 404 if the consultation does not exist in this workspace.
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.
namestringrequiredNew display name. Replaces the current name; free text with no length limit (an empty string is accepted).
An empty body on success.
curl -X PATCH "https://vetnio.com/api/v2/workspaces/demo-north-clinic/consultations/bc0cf418-6503-46eb-9828-c83f8c193426" \
-H "Authorization: Bearer $VETNIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Bella - annual vaccination"
}'{}DELETE/workspaces/{workspaceId}/consultations/{consultationId}
Archives the consultation. Nothing is erased: recordings, transcript, notes and uploaded files are kept, and the consultation stays readable by ID (GET .../consultations/{consultationId}, transcript and records). It disappears from GET .../consultations, but still appears in the admin export list. Archived consultations cannot be changed: write endpoints, including a second DELETE, return 403 with data.reason archived_consultation. Users can restore archived consultations in the Vetnio web app; permanent erasure is not available through the API. The clinic's audio-retention policy still removes audio on its normal schedule.
Any member of the workspace can archive any consultation in it. Returns 404 if the consultation does not exist in this workspace.
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.
successbooleanrequiredAlways true when the consultation was archived.
curl -X DELETE "https://vetnio.com/api/v2/workspaces/demo-north-clinic/consultations/bc0cf418-6503-46eb-9828-c83f8c193426" \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"success": true
}GET/workspaces/{workspaceId}/consultations/{consultationId}/additional-info
Returns the free-text additional information attached to the consultation. Vetnio adds this text to the AI prompt, next to the transcript, whenever it generates the clinical note or other documents, so it is the place for facts that were not said aloud (lab values, history, owner messages). Returns 404 when no additional information has been saved. Archived consultations remain readable.
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.
additionalInfostringrequiredThe saved text exactly as stored, up to 10,000 characters.
curl "https://vetnio.com/api/v2/workspaces/demo-north-clinic/consultations/bc0cf418-6503-46eb-9828-c83f8c193426/additional-info" \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"additionalInfo": "Owner reports mild itching around the ears for two weeks."
}PUT/workspaces/{workspaceId}/consultations/{consultationId}/additional-info
Creates or replaces the free-text additional information for a consultation. The text is used the next time a clinical note or other document is generated; saving it does not regenerate existing documents. Idempotent: sending the same text again has no further effect. Returns 403 for archived consultations.
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.
additionalInfostringrequiredText to store, 1 to 10,000 characters, in any language. Replaces the previous value entirely (there is no append). Because empty strings are rejected, saved text cannot be cleared through the API.
at least 1 characters · at most 10000 characters
successbooleanrequiredAlways true when the text was saved.
curl -X PUT "https://vetnio.com/api/v2/workspaces/demo-north-clinic/consultations/bc0cf418-6503-46eb-9828-c83f8c193426/additional-info" \
-H "Authorization: Bearer $VETNIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"additionalInfo": "Owner reports mild itching around the ears for two weeks."
}'{
"success": true
}PUT/workspaces/{workspaceId}/consultations/{consultationId}/external-id
Sets or replaces the consultation's externalId, the link to the matching visit in the clinic's practice-management system. Vetnio's practice-management integrations (such as Provet) use it to find the consultation and to export notes back to that visit, and POST .../consultations with the same externalId returns this consultation instead of creating a new one. Uniqueness is not enforced: if several active consultations share an external ID, lookups return one of them, so avoid reusing IDs. Idempotent. Returns 403 for archived consultations.
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.
externalIdstringrequiredIdentifier of the matching visit or consultation in your practice-management system (for example a Provet consultation ID). Free text; replaces any previous value. Not checked for uniqueness, so several consultations can share one external ID.
successbooleanrequiredAlways true when the external ID was saved.
curl -X PUT "https://vetnio.com/api/v2/workspaces/demo-north-clinic/consultations/bc0cf418-6503-46eb-9828-c83f8c193426/external-id" \
-H "Authorization: Bearer $VETNIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"externalId": "pims-visit-10482"
}'{
"success": true
}