---
title: "Retrieve a form submission"
method: GET
path: "/forms/{formId}/submissions/{submissionId}"
tags: ["Forms"]
---

# Retrieve a form submission

`GET /forms/{formId}/submissions/{submissionId}`

## Request

- Base URL: `https://api.tally.so`
- URL: `https://api.tally.so/forms/{formId}/submissions/{submissionId}`
- Auth: HTTP bearer

Returns a specific form submission with all its responses and the form questions.

## Path parameters

- `formId` string, required
- `submissionId` string, required

## Response `200`

Form submission retrieved successfully

- object
  - `questions` Question[]: List of form questions with their fields
    - `id` string
    - `type` 'FORM_TITLE' | 'TEXT' | 'LABEL' | 'TITLE' | 'HEADING_1' | 'HEADING_2' | 'HEADING_3' | 'DIVIDER' | 'PAGE_BREAK' | 'IMAGE' | 'EMBED' | 'EMBED_VIDEO' | 'EMBED_AUDIO' | 'QUESTION' | 'MATRIX' | 'INPUT_TEXT' | 'INPUT_NUMBER' | 'INPUT_EMAIL' | 'INPUT_LINK' | 'INPUT_PHONE_NUMBER' | 'INPUT_DATE' | 'INPUT_TIME' | 'TEXTAREA' | 'FILE_UPLOAD' | 'LINEAR_SCALE' | 'RATING' | 'HIDDEN_FIELDS' | 'MULTIPLE_CHOICE_OPTION' | 'CHECKBOX' | 'DROPDOWN_OPTION' | 'RANKING_OPTION' | 'MULTI_SELECT_OPTION' | 'PAYMENT' | 'SIGNATURE' | 'MATRIX_ROW' | 'MATRIX_COLUMN' | 'CONDITIONAL_LOGIC' | 'CALCULATED_FIELDS' | 'CAPTCHA' | 'RESPONDENT_COUNTRY'
    - `title` string
    - `isTitleModifiedByUser` boolean
    - `formId` string
    - `isDeleted` boolean
    - `numberOfResponses` integer
    - `createdAt` string, date-time
    - `updatedAt` string, date-time
    - `fields` QuestionField[]
      - `uuid` string, uuid
      - `type` 'FORM_TITLE' | 'TEXT' | 'LABEL' | 'TITLE' | 'HEADING_1' | 'HEADING_2' | 'HEADING_3' | 'DIVIDER' | 'PAGE_BREAK' | 'IMAGE' | 'EMBED' | 'EMBED_VIDEO' | 'EMBED_AUDIO' | 'QUESTION' | 'MATRIX' | 'INPUT_TEXT' | 'INPUT_NUMBER' | 'INPUT_EMAIL' | 'INPUT_LINK' | 'INPUT_PHONE_NUMBER' | 'INPUT_DATE' | 'INPUT_TIME' | 'TEXTAREA' | 'FILE_UPLOAD' | 'LINEAR_SCALE' | 'RATING' | 'HIDDEN_FIELDS' | 'MULTIPLE_CHOICE_OPTION' | 'CHECKBOX' | 'DROPDOWN_OPTION' | 'RANKING_OPTION' | 'MULTI_SELECT_OPTION' | 'PAYMENT' | 'SIGNATURE' | 'MATRIX_ROW' | 'MATRIX_COLUMN' | 'CONDITIONAL_LOGIC' | 'CALCULATED_FIELDS' | 'CAPTCHA' | 'RESPONDENT_COUNTRY'
      - `blockGroupUuid` string, uuid
      - `title` string
  - `submission` object: The form submission with responses
    - `id` string: Submission ID
    - `formId` string: Form ID
    - `isCompleted` boolean: Whether the submission is completed
    - `submittedAt` string, date-time: When the submission was submitted
    - `locale` string, nullable: Language code the respondent filled the form in, e.g. 'nl', 'pt-BR' or 'zh-CN'. Null when not known, for example on forms without translations or on older submissions.
    - `createdAt` string, date-time: When the submission was created
    - `updatedAt` string, date-time: When the submission was last updated
    - `previewUrl` string, uri: Signed URL to view the submission in a browser. Includes an access token, no expiry.
    - `pdfUrl` string, uri: Signed URL to download the submission as a PDF. Includes an access token, no expiry.
    - `responses` object[]: List of responses to form questions. Note: Only questions that have been answered will appear in this array.
      - `id` string, required: Response ID
      - `formId` string, required: Form ID
      - `questionId` string, required: Question ID
      - `respondentId` string, required: Respondent ID
      - `submissionId` string, nullable: Submission ID
      - `sessionUuid` string, uuid, required: Session UUID
      - `answer` union, required: The answer value for this question. Type varies based on question type.
        - string
        - number
        - boolean
        - unknown[]
          - unknown
        - object
      - `formattedAnswer` string: Formatted answer (e.g., for number inputs with custom formatting)
      - `createdAt` string, date-time, required: When the response was created
      - `updatedAt` string, date-time, required: When the response was last updated

## Other responses

- `401`: Unauthorized
- `403`: Forbidden
- `404`: Form or submission not found

## Changes

- **2026-10-26** `b4ea46b0b72d`: 1 info
  - added the optional property `submission/locale` to the response with the `200` status

[Operation history](https://skmtc.dev/tally/apis/tally-api/changes/forms/:formId/submissions/:submissionId/get.md)

---

[API](https://skmtc.dev/tally/apis/tally-api.md) - [All operations](https://skmtc.dev/tally/apis/tally-api/llms.txt) - [OpenAPI document](https://skmtc.dev/tally/apis/tally-api/revisions/8b37e41e11fa?raw)
