---
title: "Create a new questionnaire response"
method: POST
path: "/QuestionnaireResponses"
tags: ["QuestionnaireResponses"]
---

# Create a new questionnaire response

`POST /QuestionnaireResponses`

## Request body

- CreateQuestionnaireResponseRequest — Request to create a new response (start filling out a questionnaire)
  - `questionnaireId` string, required
  - `patientId` string, nullable
  - `clientId` string, nullable
  - `appointmentId` string, nullable
  - `responses` string, nullable
  - `customAttributes` string, nullable

## Response `200`

OK

- QuestionnaireResponseDto — Full questionnaire response (submission) DTO
  - `id` string
  - `questionnaireId` string
  - `questionnaire` QuestionnaireListItemDto — Lightweight questionnaire item for lists
    - `id` string
    - `name` string
    - `description` string, nullable
    - `type` integer
    - `status` integer
    - `isTemplate` boolean
    - `version` union
      - integer
      - string, int32
    - `createdAt` string, date-time
    - `updatedAt` string, date-time
    - `automationCount` union — Number of active and inactive automation rules referencing this form. Populated by the list endpoint via a join on automation_questionnaire_refs.
      - integer
      - string, int32
  - `patientId` string, nullable
  - `patient` PatientSummaryDto — Lightweight patient summary for lists and references
    - `id` string — Unique patient identifier
    - `name` string — The patient's name
    - `species` string — The species name. References a species from GET /species endpoint.
    - `speciesId` string, nullable — The species ID for programmatic lookups.
    - `breed` string — The breed name
    - `sex` string — The patient's sex
    - `dateOfBirth` string, date-time, nullable — Date of birth, if known
    - `isEstimatedAge` boolean
    - `fixed` boolean — Whether the patient is spayed/neutered
    - `treatmentAcceptanceRate` union
      - number, double
      - string, double
  - `clientId` string, nullable
  - `client` ClientSummaryDto
    - `id` string
    - `firstName` string
    - `lastName` string
    - `email` string, nullable
    - `phoneNumber` string, nullable
  - `appointmentId` string, nullable
  - `responses` string
  - `status` integer
  - `submittedAt` string, date-time, nullable
  - `submittedBy` string, nullable
  - `createdAt` string, date-time
  - `updatedAt` string, date-time
  - `customAttributes` string, nullable
  - `linkExpiresAt` string, date-time, nullable — Latest expiry among the response's public links. Lets read surfaces derive "Sent, awaiting" (InProgress, unexpired) vs "Expired" (InProgress, expired).
  - `linkFirstViewedAt` string, date-time, nullable — Earliest first-view among the response's public links (null = never opened). Lets read surfaces distinguish "Sent, awaiting" from "Opened, awaiting".

---

[API](https://skmtc.net/clinicos/apis/pawthosx-business-api-v1.md) · [All operations](https://skmtc.net/clinicos/apis/pawthosx-business-api-v1/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/clinicos/pawthosx-business-api-v1/versions/a905bde4e796/schema)
