# Read or export one form submission including raw values for an authorized principal.

Pass format=json, yaml, or csv to download a bounded stable export for one submission. CSV is available only when submitted field values are tabular scalars or scalar arrays.

Canonical: https://commentary.dev/docs/reference/api/get-form-submission

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

Pass format=json, yaml, or csv to download a bounded stable export for one submission. CSV is available only when submitted field values are tabular scalars or scalar arrays.

## Access

Use a credential with `commentary.forms.read`.

Provider access, workspace membership, and agent grants are enforced separately. A token does not expand access to a repository or resource. [Set up developer access](/docs/build/developer-access).

## Parameters

| Name | Location | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `formId` | path | string | Yes | Form id or reference id. |
| `submissionId` | path | string | Yes | Form submission id. |
| `format` | query | `"json"` · `"yaml"` · `"csv"` | No | Optional export format. Omit for the normal JSON API envelope. |
| `kind` | query | string | No | Source context kind when exporting a review-scoped embedded answer. |
| `draftReviewSessionId` | query | string | No |  |
| `webAppReviewId` | query | string | No |  |
| `owner` | query | string | No |  |
| `repo` | query | string | No |  |
| `prNumber` | query | integer | No |  |
| `branchRef` | query | string | No |  |
| `filePath` | query | string | No |  |
| `documentVersionId` | query | string | No |  |
| `formInstanceId` | query | string | No |  |
| `X-Commentary-Workspace-Id` | header | string | No | Must match the credential workspace. This header cannot widen grant authority. |
| `X-Correlation-Id` | header | string | No |  |

## Call the endpoint

Replace path placeholders and your credential. For body operations, create `request.json` using the required fields above; this command does not invent resource identifiers or consent.

```bash
curl --request GET \
  'https://commentary.dev/api/v1/forms/<formId>/submissions/<submissionId>' \
  --header 'Authorization: Bearer <your-token>'
```

## Responses

| Status | Meaning | Payload |
| --- | --- | --- |
| `200` | Successful response. | object |
| `400` | The request was invalid. | [ExternalError](/docs/reference/schemas/external-error) |
| `401` | Authentication is required. | [ExternalError](/docs/reference/schemas/external-error) |
| `403` | The token or session does not have permission for this resource. | [ExternalError](/docs/reference/schemas/external-error) |
| `404` | The resource was not found. | [ExternalError](/docs/reference/schemas/external-error) |
| `409` | CSV export is not available for this submission shape. | [ExternalError](/docs/reference/schemas/external-error) |
| `413` | The export exceeded the size limit. | [ExternalError](/docs/reference/schemas/external-error) |
| `429` | The request was rate limited. | [ExternalError](/docs/reference/schemas/external-error) |

### Successful response fields

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ok` | `true` | No |  |
| `submission` | [FormSubmission](/docs/reference/schemas/form-submission) | No |  |

## Recover from errors

Use the returned status and error body. Correct invalid fields before retrying; reconnect or narrow the target for authentication and permission errors. For conditional writes, reload the latest version before preparing a new request. Respect rate-limit headers and retry only when the operation’s idempotency contract permits it.

## Contract and related guidance

Operation ID: `getFormSubmission`. [Download the OpenAPI contract](/docs/reference/openapi.json) for complete constraints and code generation. [Browse endpoints](/docs/reference/api-operations).
