---
title: "Get a page of consultations"
method: GET
path: "/workspaces/{workspaceId}/consultations"
tags: ["consultations"]
---

# Get a page of consultations

`GET /workspaces/{workspaceId}/consultations`

## Request

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

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.

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

## Query parameters

- `currentPage` number: Page to return, starting at 1. Defaults to 1. Must be 1 or greater; lower values cause a server error.
- `consultationsPerPage` number: Page 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.
- `searchQuery` string: Case-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.

## Response `200`

Paginated consultation list with total count for the current user.

- ConsultationPage: One page of the caller's own consultations in the workspace, newest first, with totals for pagination.
  - `consultations` ConsultationListItemOutput[], required: Consultations 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`.
    - `id` string, required: Consultation ID (UUID).
    - `workspaceId` string, required: ID of the workspace (clinic) that owns the consultation.
    - `creatorId` string, required: User ID of the person who created the consultation. Always the caller for this endpoint.
    - `name` string, required: Display name of the consultation; may be an empty string.
    - `aiTitle` string, nullable: Separate 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.
    - `createdAt` string, required: When the consultation was created, as an ISO-8601 UTC timestamp. The list is sorted by this value, newest first.
    - `recordingLanguageCode` string, nullable: Language 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.
    - `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. Same value as `uploadedRecordingDurationInMilliseconds`.
    - `uploadedRecordingDurationInMilliseconds` 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.
    - `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.
    - `hasClinicalNote` boolean, required: `true` when a clinical note has been saved for the consultation (generated or written manually).
    - `hasCommunication` boolean, required: `true` when an owner communication has been saved for the consultation.
    - `discussionStatus` string, nullable: Legacy field kept for backward compatibility. Current consultations always report `missing`; do not rely on it.
    - `rating` 'like' | 'dislike', nullable: Legacy 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.
    - `ratingReason` string, nullable: Legacy free-text reason for `rating`; normally `null`.
    - `clinicalNoteTemplateId` string, nullable: ID of the template used to generate the clinical note, or `null` when none is selected.
    - `communicationTemplateId` string, nullable: ID of the template used to generate the owner communication, or `null` when none is selected.
    - `referralTemplateId` string, nullable: ID of the template used to generate a referral letter, or `null` when none is selected.
    - `clinicalNoteJsonTemplateId` string, nullable: ID of the JSON (structured document) template bound to the clinical note, or `null`.
    - `isGeneratingReferral` boolean: `true` while a referral letter is being generated for this consultation.
    - `lastTranscribedRecordingId` string, nullable: Recording 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.
    - `lastSubmittedRecordingId` string, nullable: Value 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.
    - `uploadedRecordingDurationInMillisecondsExcludingSilence` number: Same as `recordingDurationInMilliseconds`, but with silent stretches (quieter than -40 dB) removed. `0` until the first upload has been processed.
    - `clientId` string, nullable: ID of the client (pet owner) linked directly to the consultation by some practice-management integrations; usually `null`. Prefer `patientId` and the patient's owner.
    - `patientId` string, nullable: ID of the patient linked to the consultation, or `null` if no patient is linked.
    - `isDeleted` boolean: Whether the consultation is archived. Always `false` here because archived consultations are excluded from this list.
    - `isHidden` boolean: Whether the consultation was deleted (moved out of view) in the Vetnio app. Always `false` here because such consultations are excluded.
    - `recordingDurationInMillisecondsExcludingSilence` number: Same as `recordingDurationInMilliseconds`, but with silent stretches (quieter than -40 dB) removed. `0` until the first upload has been processed. Same value as `uploadedRecordingDurationInMillisecondsExcludingSilence`.
    - `searchableContent` string, nullable: Plain-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.
    - `externalId` string, nullable: Identifier 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.
  - `count` number, required: Number of matching entries across all pages, where a timeline of linked consultations counts once.
  - `itemsPerPage` number, required: Echo of the requested `consultationsPerPage`.
  - `totalPages` number, required: Number of pages, `ceil(count / itemsPerPage)`; `0` when nothing matches.

## 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)
