---
title: "Get consultation details"
method: GET
path: "/workspaces/{workspaceId}/consultations/{consultationId}"
tags: ["consultations"]
---

# Get consultation details

`GET /workspaces/{workspaceId}/consultations/{consultationId}`

## Request

- Base URL: `https://vetnio.com/api/v2`
- URL: `https://vetnio.com/api/v2/workspaces/{workspaceId}/consultations/{consultationId}`
- Auth: HTTP bearer

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`.

## Path parameters

- `workspaceId` string, required: Identifier 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.
- `consultationId` string, required: Identifier of the consultation (UUID), as returned when it was created or by `GET /workspaces/{workspaceId}/consultations`. It must belong to the clinic in `workspaceId`.

## Response `200`

Consultation status fields.

- ConsultationDetail: Status view of a single consultation: name, audio duration, transcription state and document-generation flags.
  - `id` string, required: Consultation ID (UUID), generated by Vetnio when the consultation is created.
  - `name` string, required: Display name of the consultation. Free text set at creation or via `PATCH .../consultations/{consultationId}`; may be an empty string.
  - `createdAt` string, required: When the consultation was created, as an ISO-8601 UTC timestamp.
  - `recordingDurationInMilliseconds` number, required: Total 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.
  - `recordingDurationInMillisecondsExcludingSilence` number, nullable, required: Same as `recordingDurationInMilliseconds`, but with silent stretches (quieter than -40 dB) removed. `0` until the first upload has been processed.
  - `isGeneratingClinicalNote` boolean, required: `true` 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.
  - `isGeneratingCommunication` boolean, required: `true` while Vetnio is generating the owner communication (the client-facing summary) for this consultation; set back to `false` when generation ends.
  - `isReadyForGeneration` boolean, required: `true` 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.
  - `clinicalNoteJsonTemplateId` string, nullable, required: ID 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.
  - `linkEntryId` integer, nullable, required: ID 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.
  - `linkJournalId` integer, nullable, required: ID of the Link journal (the animal's journal) that holds `linkEntryId`, or `null`. Combine with `linkEntryId` to build a deep link into Link.
  - `transcriptionStatus` 'idle' | 'processing' | 'completed' | 'failed', required: Overall 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.
  - `transcriptionFailureReason` 'unreadable_recording' | 'processing_failed' | 'transcription_failed', nullable, required: Why 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.

## Other responses

- `400`: Invalid input data
- `401`: Authorization not provided
- `403`: Insufficient access
- `404`: Not found
- `500`: Internal server error

---

[API](https://skmtc.dev/vetnio/apis/vetnio-api.md) - [All operations](https://skmtc.dev/vetnio/apis/vetnio-api/llms.txt) - [OpenAPI document](https://skmtc.dev/vetnio/apis/vetnio-api/revisions/d004afd5617d?raw)
