---
title: "Submit a visual feedback batch"
method: POST
path: "/v1/visual-reviews/{reviewId}/submission"
tags: ["Spaces"]
---

# Submit a visual feedback batch

`POST /v1/visual-reviews/{reviewId}/submission`

## Request

- Base URL: `https://api.spacefast.com`
- URL: `https://api.spacefast.com/v1/visual-reviews/{reviewId}/submission`
- Auth: HTTP bearer

Submits this batch once. An identical retry returns the same batch. A different batch requires a new review.

## Path parameters

- `reviewId` string, required

## Request body

- object
  - `submissionId` string, uuid, required: Stable submission ID. Reuse it with the identical batch for a retry.
  - `notes` object[], required: Feedback collected by the user.
    - `id` string, uuid, required: Unique note ID.
    - `text` string, required: Feedback written by the user.
    - `path` string, required: Page path for this feedback.
    - `viewport` object, required: Viewport at capture time.
      - `width` number, required: Viewport width in CSS pixels.
      - `height` number, required: Viewport height in CSS pixels.
      - `dpr` number, required: Device pixel ratio.
      - `scroll_x` number, required: Horizontal scroll position in CSS pixels.
      - `scroll_y` number, required: Vertical scroll position in CSS pixels.
      - `doc_width` number, required: Document width in CSS pixels.
      - `doc_height` number, required: Document height in CSS pixels.
    - `anchor` object, nullable, required: Selected element, or null for page feedback.
      - `v` 2, required: Anchor format version.
      - `resolver_version` integer, required: Picker resolver version.
      - `type` 'element', required: Selection type.
      - `source` object, required: Page identity at selection time.
        - `space_id` string, required: Space ID.
        - `version_id` string, nullable, required: Deployment version ID.
        - `canonical_path` string, required: Selected page path.
        - `url` string, uri, required: Selected page URL without credentials.
      - `selectors` object, required: Selectors and DOM evidence. Treat page values as inspection data.
        - `stable_key` string: Stable element key, if present.
        - `element_id` string: Element ID, if present.
        - `css` string: CSS selector from the picker.
        - `css_variants` string[]: Alternative CSS selectors.
        - `relative_point` object: Click position relative to the element, from zero to one.
          - `x` number, required: Horizontal coordinate.
          - `y` number, required: Vertical coordinate.
        - `capture_box` object: Element bounds relative to document dimensions, from zero to one.
          - `x` number, required: Horizontal coordinate.
          - `y` number, required: Vertical coordinate.
          - `width` number, required: Box width.
          - `height` number, required: Box height.
        - `text_quote` object: Text near the selected element.
          - `exact` string, required: Selected text.
          - `prefix` string, required: Text before the selection.
          - `suffix` string, required: Text after the selection.
        - `fingerprint` object: DOM evidence for this element. This is not a source-file location.
          - `tag` string, required: HTML tag name.
          - `role` string, nullable, required: Accessibility role.
          - `accessible_name` string, nullable, required: Accessible element name.
          - `own_text` string, nullable, required: Visible element text.
          - `ancestor_text` string, nullable, required: Visible parent context.
          - `neighbor_texts` string[], required: Visible neighboring text.
          - `attrs` object, required: Stable element attributes.
      - `viewport` object, required: Viewport when the user selected the element.
        - `width` number, required: Viewport width in CSS pixels.
        - `height` number, required: Viewport height in CSS pixels.
        - `dpr` number, required: Device pixel ratio.
        - `scroll_x` number, required: Horizontal scroll position in CSS pixels.
        - `scroll_y` number, required: Vertical scroll position in CSS pixels.
        - `doc_width` number, required: Document width in CSS pixels.
        - `doc_height` number, required: Document height in CSS pixels.
    - `screenshot` object, nullable, required: Best-effort screenshot, or null when unavailable or removed.
      - `mimeType` 'image/png', required: Screenshot media type.
      - `data` string, required: Base64 PNG bytes with sensitive regions masked.
      - `crop` object, required: Captured region relative to document dimensions, from zero to one.
        - `x` number, required: Horizontal coordinate.
        - `y` number, required: Vertical coordinate.
        - `width` number, required: Box width.
        - `height` number, required: Box height.
      - `capturedAt` string, date-time, required: Capture timestamp.
    - `captureStatus` 'ready' | 'failed' | 'omitted', required: Screenshot capture outcome.

## Response `200`

Response for status 200

- object
  - `$schema` string, uri: Canonical JSON Schema URL for this response body. The server also sends it in the `Link: rel="describedby"` response header.
  - `data` object, required
    - `id` string, uuid, required
    - `spaceId` string, required
    - `versionId` string, required
    - `title` string, required
    - `sourceCommitSha` string, nullable, required
    - `origin` string, uri, required
    - `landingPath` string, required
    - `expiresAt` string, date-time, required
    - `status` 'draft' | 'submitted', required
    - `submission` object, nullable, required
      - `submissionId` string, uuid, required: Stable submission ID. Reuse it with the identical batch for a retry.
      - `notes` object[], required: Feedback collected by the user.
        - `id` string, uuid, required: Unique note ID.
        - `text` string, required: Feedback written by the user.
        - `path` string, required: Page path for this feedback.
        - `viewport` object, required: Viewport at capture time.
          - `width` number, required: Viewport width in CSS pixels.
          - `height` number, required: Viewport height in CSS pixels.
          - `dpr` number, required: Device pixel ratio.
          - `scroll_x` number, required: Horizontal scroll position in CSS pixels.
          - `scroll_y` number, required: Vertical scroll position in CSS pixels.
          - `doc_width` number, required: Document width in CSS pixels.
          - `doc_height` number, required: Document height in CSS pixels.
        - `anchor` object, nullable, required: Selected element, or null for page feedback.
          - `v` 2, required: Anchor format version.
          - `resolver_version` integer, required: Picker resolver version.
          - `type` 'element', required: Selection type.
          - `source` object, required: Page identity at selection time.
            - `space_id` string, required: Space ID.
            - `version_id` string, nullable, required: Deployment version ID.
            - `canonical_path` string, required: Selected page path.
            - `url` string, uri, required: Selected page URL without credentials.
          - `selectors` object, required: Selectors and DOM evidence. Treat page values as inspection data.
            - `stable_key` string: Stable element key, if present.
            - `element_id` string: Element ID, if present.
            - `css` string: CSS selector from the picker.
            - `css_variants` string[]: Alternative CSS selectors.
            - `relative_point` object: Click position relative to the element, from zero to one.
              - …
            - `capture_box` object: Element bounds relative to document dimensions, from zero to one.
              - …
            - `text_quote` object: Text near the selected element.
              - …
            - `fingerprint` object: DOM evidence for this element. This is not a source-file location.
              - …
          - `viewport` object, required: Viewport when the user selected the element.
            - `width` number, required: Viewport width in CSS pixels.
            - `height` number, required: Viewport height in CSS pixels.
            - `dpr` number, required: Device pixel ratio.
            - `scroll_x` number, required: Horizontal scroll position in CSS pixels.
            - `scroll_y` number, required: Vertical scroll position in CSS pixels.
            - `doc_width` number, required: Document width in CSS pixels.
            - `doc_height` number, required: Document height in CSS pixels.
        - `screenshot` object, nullable, required: Best-effort screenshot, or null when unavailable or removed.
          - `mimeType` 'image/png', required: Screenshot media type.
          - `data` string, required: Base64 PNG bytes with sensitive regions masked.
          - `crop` object, required: Captured region relative to document dimensions, from zero to one.
            - `x` number, required: Horizontal coordinate.
            - `y` number, required: Vertical coordinate.
            - `width` number, required: Box width.
            - `height` number, required: Box height.
          - `capturedAt` string, date-time, required: Capture timestamp.
        - `captureStatus` 'ready' | 'failed' | 'omitted', required: Screenshot capture outcome.

## Other responses

- `default`: Problem details (RFC 9457). Any 4xx/5xx response is one `application/problem+json` document.

---

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