---
title: "POST Questionnaire Question Answer"
method: POST
path: "/v2/questionnaires/questions/{id}/answer"
---

# POST Questionnaire Question Answer

`POST /v2/questionnaires/questions/{id}/answer`

Write or update an answer on a questionnaire question. Creates a new immutable answer revision; the previous answer is preserved in edit_history. Requires api_questionnaires with write capability, the same permission as PATCH Questionnaire Question. At least one answer field must be provided. Errors: 400 when no answer fields are provided or the question is not found; 403 when the API key lacks api_questionnaires write permission.

## Path parameters

- `id` string, required

## Request body

- object — Answer update payload. At least one answer field is required.
  - `prose` string — Long-form answer text.
  - `structured_answer` string — Short answer, for example Yes or No.
  - `structured_answers` string[] — Multi-select answers.
  - `object_response` object — Column-based answers for object_response questions.

## Response `200`

Returns the full question object with updated final_answer_text, final_structured_answer, final_structured_answers, final_object_response, edit_history, and last_edited_by.

- object
  - `id` string, uuid — Unique identifier for the question.
  - `question_type` 'free_response' | 'select_one' | 'select_multiple' | 'object_response' — The answer format expected for this question.
  - `question_text` string — The question.
  - `bot_answer_text` string, nullable — ConveyorAI's draft free-response answer, or null if no answer was generated.
  - `bot_structured_answer` string, nullable — ConveyorAI's draft answer for select_one questions, or null.
  - `bot_object_response` object, nullable — ConveyorAI's draft answer for object_response type questions. An object mapping column label to answer value. Null for other question types.
  - `final_answer_text` string, nullable — Updated human-reviewed final free-response answer, or null if not provided.
  - `final_structured_answer` string, nullable — Updated human-reviewed final answer for select_one questions, or null if not provided.
  - `final_structured_answers` string[], nullable — Updated human-reviewed final answers for select_multiple questions, or null if not provided.
  - `final_object_response` object, nullable — Updated human-reviewed answer for object_response type questions. Null for other question types or if not provided.
  - `status` string — The review status of the question.
  - `reusable` boolean — Whether this question's answer is eligible for the Past Answers Knowledge Base.
  - `edit_history` object[] — Full answer revision history, ordered most recent first.
    - `answer_type` 'ai_generated' | 'canonical' | 'verbatim' | 'topic_verbatim' | 'rule_based' | 'ai_assisted' | 'conditional_child_na' | 'human' — How the answer was created.
    - `editor` object, nullable — Who made this edit. Null for bot or system answers.
      - `name` string, nullable — Editor display name.
      - `email` string, email — Editor email address.
    - `answer_text` string, nullable — The answer prose at this revision.
    - `structured_answer` string, nullable — The structured or short answer at this revision.
    - `created_at` string, date-time — When this revision was created.
  - `last_edited_by` object, nullable — The user who last edited the answer.
    - `name` string, nullable — User's display name.
    - `email` string, email — User's email address.
  - `collaborators` object[] — Users assigned to or collaborating on this question.
    - `name` string, nullable — User's display name.
    - `email` string, email — User's email address.
  - `cited_sources` object[] — Sources cited in ConveyorAI's answer.
    - `title` string — Title of the cited source.
    - `source_type` string — Type of source.
  - `questionnaire_id` string, uuid, nullable — ID of the parent questionnaire, if applicable.
  - `questionnaire_type` 'RFP' | 'Security Questionnaire' | 'Past Answers Import', nullable — Cleaned label for the parent questionnaire type.
  - `connection_domain` string, nullable — Domain of the customer who sent this questionnaire.
  - `created_at` string, date-time — When the question was created.
  - `questionnaire_completed_at` string, date-time, nullable — When the parent questionnaire was marked completed.

## Other responses

- `400` — No answer fields provided, or question not found.
- `403` — API key lacks api_questionnaires write permission.

---

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