---
title: "Get a questionnaire by public token (no authentication required)"
method: GET
path: "/public/questionnaires/{token}"
tags: ["PublicQuestionnaires"]
---

# Get a questionnaire by public token (no authentication required)

`GET /public/questionnaires/{token}`

## Request

- Base URL: `https://api.clinicos.vet/backend/business`
- URL: `https://api.clinicos.vet/backend/business/public/questionnaires/{token}`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/docs/public/questionnaires/:token/get.ts> (a function with typed inputs; its response is checked against the schema)

## Path parameters

- `token` string, required

## Response `200`

OK

- PublicQuestionnaireDto: Public questionnaire access via token
  - `responseId` string
  - `questionnaire` QuestionnaireDto: Full questionnaire response
    - `id` string
    - `name` string
    - `description` string, nullable
    - `type` 'Intake' | 'PreVisit' | 'PostVisit' | 'Satisfaction' | 'Custom' | 'NewClient' | 'AppointmentConfirmation' | 'Consent' | 'Handout'
    - `status` integer
    - `isTemplate` boolean
    - `schema` string
    - `version` union
      - integer
      - string, int32
    - `createdAt` string, date-time
    - `updatedAt` string, date-time
    - `customAttributes` string, nullable
    - `handout` HandoutSettingsDto: A handout's settings (ITE-1473). A nested object so the follow-ups can grow it without touching every questionnaire field: ITE-1474 adds the current PDF version here.
      - `contentMode` integer: Where a handout's content comes from (ITE-1473). Stored as text in `questionnaires.handout_content_mode`; null on every non-handout questionnaire.
      - `acknowledgement` integer: What a client must do with a handout (ITE-1473). Stored as text in `questionnaires.handout_acknowledgement`; null on every non-handout questionnaire. The answer fields each value requires come from `QuestionnaireTypeAffordances.HandoutAcknowledgementFieldIds`.
      - `currentVersion` HandoutVersionSummaryDto: The headline facts of one handout version (ITE-1474).
        - `version` union
          - integer
          - string, int32
        - `contentMode` integer: Where a handout's content comes from (ITE-1473). Stored as text in `questionnaires.handout_content_mode`; null on every non-handout questionnaire.
        - `fileName` string, nullable
        - `createdAt` string, date-time
      - `diagnosisKeys` string[], nullable: Diagnoses the handout is about (ITE-1480), e.g. "heartworm disease": a patient with a matching problem is offered this handout. On create and update, null leaves the tags as they are and an empty list clears them; the server trims, lower-cases and de-duplicates.
      - `reviewIntervalMonths` union: "Review every N months" (ITE-1481), 1–60; null = no review schedule. Staff DTO only: the public link never carries the review fields. Like the rest of this object, an update replaces them, so send back what you read.
        - integer
        - string, int32
      - `reviewOwnerUserId` string, nullable: The user reminded when a review falls due. At most one of this and string? HandoutSettingsDto.ReviewOwnerRoleId.
      - `reviewOwnerRoleId` string, nullable: A role whose active members are all reminded.
      - `lastReviewedAt` string, date-time, nullable: Read-only: the last "Mark reviewed".
      - `reviewDueAt` string, date-time, nullable: Read-only: when the next review falls due, or null without a schedule.
  - `patientName` string, nullable
  - `appointmentInfo` string, nullable
  - `existingResponses` string, nullable
  - `acknowledgedAt` string, date-time, nullable: When the client acknowledged this handout (ITE-1475); null for any other type, and for a handout not yet acknowledged. A handout link keeps serving its content after the acknowledgement, until it expires, so the client can re-read it: when this is set the page shows it read-only, and a second submit is refused.
  - `region` RegionSettingsDto: Region and locale settings for internationalization
    - `regionCode` string: BCP 47 locale code: "en-US" or "en-GB"
    - `currencyCode` string: ISO 4217 currency code: "USD" or "GBP"
    - `weightSystem` string: Weight system: "imperial" (lbs) or "metric" (kg)
    - `temperatureSystem` string: Temperature system: "fahrenheit" or "celsius"
    - `distanceSystem` string: Distance system: "miles" or "kilometers"

## Other responses

- `400`: Bad Request
- `404`: Not Found

## Changes

- **2026-10-28** `099cf36186e0`: 3 warning, 6 info
  - added the new `Handout` enum value to the `questionnaire/type` response property for the response status `200` (media type: text/plain)
  - added the new `Handout` enum value to the `questionnaire/type` response property for the response status `200` (media type: application/json)
  - added the new `Handout` enum value to the `questionnaire/type` response property for the response status `200` (media type: text/json)
  - added the optional property `acknowledgedAt` to the response with the `200` status (media type: text/plain)
  - …5 more
- **2026-10-21** `85ee96c0bb96`: 3 breaking, 24 warning
  - the `questionnaire/type` response's property type changed from `integer` to no type for status `200` (media type: text/plain)
  - the `questionnaire/type` response's property type changed from `integer` to no type for status `200` (media type: application/json)
  - the `questionnaire/type` response's property type changed from `integer` to no type for status `200` (media type: text/json)
  - added the new `AppointmentConfirmation` enum value to the `questionnaire/type` response property for the response status `200` (media type: text/plain)
  - …23 more
- …earlier changes not shown

[Operation history](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/changes/public/questionnaires/:token/get.md)

---

[API](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1.md) - [All operations](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/llms.txt) - [OpenAPI document](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/revisions/099cf36186e0?raw)
