---
title: "Save answers to one questionnaire answer request"
method: POST
path: "/api/questionnaires/requests/{requestId}/responses"
tags: ["Questionnaire Responses"]
---

# Save answers to one questionnaire answer request

`POST /api/questionnaires/requests/{requestId}/responses`

Writes a batch of answers against a single answer request — the write behind every answer a supplier saves, the "not available" toggle, the bulk auto-fill from the company profile and the SLCP prefill. Only the company the request was addressed to may write to it; anyone else gets 404 `request_not_found`, so the existence of another company's request is never confirmed. A missing question answers 404 `question_not_found`, and an answer that fails its Retraced datapoint answers 400 `invalid_answer_for_datapoint`. On a CERTIFICATE question a newly linked certificate must be the one its option asks for — linking a certificate recorded against a different standard answers 400 `certificate_does_not_match_option`, naming both standards and what to do. Only pairings the request *introduces* are checked: one already stored is left alone, so a rule added after the fact can never stop a supplier saving. The check also only fires when the option and the certificate are both known and disagree, so an option this question does not have, an option carrying no standard, or a missing certificate all pass. Every answer is validated before any is written, so a batch containing one bad answer stores nothing; past that point the batch is not transactional, and an answer that fails after earlier ones have committed leaves those in place. Re-answering the same question **updates** the stored answer rather than adding a second one, keeping its id and any reviewer verdict, so re-submitting is a silent no-op by design. Answers omitting `status` default to `IN_REVIEW`. Answers to photo, video and audit questions also register their uploaded files and move them into private storage. Responds 201 with an empty body.

## Path parameters

- `requestId` string, required

## Request body

- object
  - `verificationMeta` object
    - `id` string
    - `name` string
    - `issuedOn` string
    - `version` string
  - `payload` object[], required
    - `questionId` string, required
    - `answer` union, required
      - string
      - number
      - unknown[]
        - unknown
      - object
    - `isNotAvailable` integer, required
    - `status` 'APPROVED' | 'DENIED' | 'IN_REVIEW' | 'NOT_SUBMITTED'
    - `autoAnswered` boolean

## Response `201`

No content

## Other responses

- `400` — Default Response
- `401` — Default Response
- `403` — Default Response
- `404` — Default Response

## Changes

> 21 revisions in range; 1 not diffed.

- **2026-08-20** `2f11192a4402` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/retraced/apis/api-reference/changes/api/questionnaires/requests/:requestId/responses/post.md)

---

[API](https://skmtc.dev/retraced/apis/api-reference.md) · [All operations](https://skmtc.dev/retraced/apis/api-reference/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/retraced/api-reference/revisions/1df37791a1bb/schema)
