---
title: "Get Review Page"
method: GET
path: "/v1/review-pages/{access_token}"
tags: ["manufacturing-v1"]
---

# Get Review Page

`GET /v1/review-pages/{access_token}`

Everything the website needs to open a review link. The unguessable
token embedded in `review_url` is the credential.

## Path parameters

- `access_token` string, required

## Response `200`

Successful Response

- V1ReviewPage — What the website needs to render a review link. The link token is the credential; no API key is involved.
  - `id` string, required
  - `object` 'review_page'
  - `status` 'open' | 'expired'
  - `design_id` string, required
  - `dfm_id` string, nullable
  - `design` V1Design, required
    - `id` string, required
    - `object` 'design'
    - `status` 'queued' | 'processing' | 'ready' | 'failed', required
    - `status_url` string, required
    - `name` string, required
    - `formed_dimensions` V1Dimensions
      - `length_mm` number, required
      - `width_mm` number, required
      - `height_mm` number, required
    - `parts` V1Part[]
      - `analysis_status` 'ready' | 'failed' — Whether manufacturing geometry analysis completed. A failed part remains in the design for preview but cannot be quoted; ready does not imply manufacturability approval.
      - `id` string, required
      - `name` string, required
      - `suggested_process` 'sheet_metal' | 'tube_laser', required
      - `instance_count` integer
      - `formed_dimensions` V1Dimensions, required
        - `length_mm` number, required
        - `width_mm` number, required
        - `height_mm` number, required
      - `flat_pattern_dimensions` V1Dimensions
        - `length_mm` number, required
        - `width_mm` number, required
        - `height_mm` number, required
      - `detected_thickness_mm` number, nullable
      - `bend_count` integer
      - `bends` V1Bend[]
        - `id` integer, required
        - `angle_degrees` number, required
        - `radius_mm` number, required
        - `length_mm` number, required
        - `location` V1Point
          - `x` number, required
          - `y` number, required
          - `z` number, required
        - `direction` V1Point
          - `x` number, required
          - `y` number, required
          - `z` number, required
        - `line_start` V1Point
          - `x` number, required
          - `y` number, required
          - `z` number, required
        - `line_end` V1Point
          - `x` number, required
          - `y` number, required
          - `z` number, required
        - `distortion_zone_sides` V1BendDistortionZoneSide[]
          - `source_hole_id` integer, nullable
          - `edge_start` V1Point, required
            - `x` number, required
            - `y` number, required
            - `z` number, required
          - `edge_end` V1Point, required
            - `x` number, required
            - `y` number, required
            - `z` number, required
          - `outward_direction` V1Point, required
            - `x` number, required
            - `y` number, required
            - `z` number, required
      - `hole_count` integer
      - `holes` V1Hole[]
        - `id` integer, required
        - `shape` 'round' | 'cutout' — `round` holes have a `diameter_mm`; `cutout` is any other interior boundary (slot, rectangle, irregular) and carries an `outline`. Hole operations (taps, studs, nuts, countersinks) apply to round holes only.
        - `diameter_mm` number, required — 0 for cutouts; see `shape`.
        - `area_mm2` number, required
        - `center` V1Point, required
          - `x` number, required
          - `y` number, required
          - `z` number, required
        - `normal` V1Point, required
          - `x` number, required
          - `y` number, required
          - `z` number, required
        - `distance_to_nearest_edge_mm` number, nullable
        - `face_id` integer, nullable — The flat face (panel between bends) this hole sits on; see the part's `faces[]`. Null when the analyzer did not resolve faces.
        - `nearest_bend_id` integer, nullable — ID in the part's `bends[]`.
        - `distance_to_nearest_bend_mm` number, nullable — Distance from the hole centre to the nearest bend line. Null when the part is flat or the hole is beside every bend's span.
        - `outline` V1Point[]
          - `x` number, required
          - `y` number, required
          - `z` number, required
        - `wall` string, nullable
        - `position_along_tube_mm` number, nullable
      - `surface_area_cm2` number, nullable
      - `cut_length_mm` number, nullable
      - `flange_lengths` V1FlangeLength[]
        - `length_mm` number, required
        - `bend_radius_mm` number, nullable
        - `bend_angle_degrees` number, nullable
      - `backgauge_flanges` V1BackgaugeFlange[]
      - `faces` V1Face[] — Flat panels between bends; empty for tubes and flat parts.
        - `id` integer, required
        - `parent_face_id` integer, nullable
        - `hole_ids` integer[]
      - `tube` V1TubeAnalysis
        - `holes_coordinate_frame` 'source' | 'normalized' — Frame of this part's holes. Apply normalized_to_source_transform only for normalized holes, then apply the part instance transform.
        - `detected_profile_key` string, nullable
        - `selected_profile_id` string, nullable
        - `length_mm` number, nullable
        - `cross_section` V1TubeCrossSection
          - `shape` string, nullable
          - `outer_width_mm` number, nullable
          - `outer_height_mm` number, nullable
          - `outer_diameter_mm` number, nullable
          - `wall_thickness_mm` number, nullable
        - `normalized_to_source_transform` array[], nullable — 4x4 row-major transform from the normalized tube frame back to the uploaded file's coordinates.
          - number[]
        - `features` V1TubeFeature[]
          - `type` string, required
          - `id` integer, nullable
          - `diameter_mm` number, nullable
          - `center` V1Point
            - `x` number, required
            - `y` number, required
            - `z` number, required
          - `wall_normal` V1Point
            - `x` number, required
            - `y` number, required
            - `z` number, required
          - `wall` string, nullable
          - `position_along_tube_mm` number, nullable
      - `model_url` string, required
      - `flat_pattern_model_url` string, nullable
      - `image_url` string, nullable — Rendered picture of this part with every hole and bend labelled by ID. Accepts `?view=iso|top|bottom|front|back|left|right|flat`, `?format=png|svg`, and `?width=`. Bottom-face features are drawn hollow when they are hidden in the chosen view.
    - `part_instances` V1PartInstance[]
      - `id` string, required
      - `part_id` string, required
      - `model_part_id` string, nullable — Mesh-name identity in the shared assembly GLB; may differ from part_id after a copy.
      - `instance_index` integer, required
      - `transform` array[], required
        - number[]
    - `model_url` string, nullable
    - `image_url` string, nullable — Rendered picture of the whole design (all part instances in place). Accepts the same `view`, `format`, and `width` parameters as part images; labels are per part, so use each part's `image_url` to identify holes and bends.
    - `review_url` string, nullable — Website page where a person can look at this design in the 3D configurator, add or change hole operations, material, and finish, and save the result. Read the saved choices back with `GET /v1/review-links/{id}`; the link `id` is `review_link_id`.
    - `review_link_id` string, nullable
    - `models_status` 'queued' | 'processing' | 'ready' | 'failed', required
    - `weld_candidates_url` string, nullable — Discover located contact paths and joined part-instance IDs for configuring welds.
    - `models_error` string, nullable
    - `preview_status` 'queued' | 'processing' | 'ready' | 'failed'
    - `preview_url` string, nullable — Owner-authorized whole-model preview, available before analysis and production models finish.
    - `preview_error` string, nullable
    - `created_at` string, date-time, nullable
    - `updated_at` string, date-time, nullable
    - `error` V1ResourceError
      - `code` string, required
      - `message` string, required
  - `configuration` V1ManufacturingConfiguration, required — Canonical manufacturing intent used by both DFM and quotes. Precedence is part override, then defaults, then unset. Process is owned by the analyzer and is intentionally absent from this request model. Parts connected by located welds with the same powder-coat color are coated as a weldment and may share a hanging opening. Disconnected parts and groups with different colors must each have their own opening.
    - `defaults` V1DefaultSelection — Part-agnostic choices applied to every compatible part. `material_id` applies to sheet-metal parts only and `tube_profile_id` to tube-laser parts only; the other fields apply to every part. Hole-level operations are never defaults because hole IDs are scoped to one part.
      - `material_id` string, nullable
      - `tube_profile_id` string, nullable
      - `powder_coat_color_id` string, nullable
      - `finish_id` string, nullable
    - `parts` V1PartConfiguration[]
      - `material_id` string, nullable
      - `tube_profile_id` string, nullable
      - `powder_coat_color_id` string, nullable
      - `finish_id` string, nullable
      - `part_id` string, required
      - `taps` V1TapOperation[]
        - `hole_id` integer, required
        - `tap_id` string, required — `id` from GET /v1/hardware/taps.
      - `studs` V1StudOperation[]
        - `hole_id` integer, required
        - `stud_id` string, required — `id` from GET /v1/hardware/studs.
        - `side` 'top' | 'bottom' — Sheet face the stud is installed from.
      - `nuts` V1NutOperation[]
        - `hole_id` integer, required
        - `nut_id` string, required — `id` from GET /v1/hardware/nuts.
        - `side` 'top' | 'bottom' — Sheet face the nut is installed from.
      - `standoffs` V1StandoffOperation[]
        - `hole_id` integer, required
        - `standoff_id` string, required — `id` from GET /v1/hardware/standoffs.
        - `side` 'top' | 'bottom' — Sheet face the standoff is installed from.
      - `countersinks` V1CountersinkOperation[]
        - `hole_id` integer, required
        - `outer_diameter_mm` number, required
        - `angle` 82 | 90, required
        - `side` 'top' | 'bottom', required — Sheet face the countersink is cut into.
    - `assembly_operations` V1WeldingOperation[]
      - `type` 'weld'
      - `method` 'auto' | 'mig' | 'tig'
      - `weld_length_mm` number, nullable — Total deposited weld length, excluding stitch gaps. Calculated from the path and optional stitch pattern when omitted; if supplied it must match.
      - `stitch` V1StitchWeldPattern — Repeat beads along the guide's arc length; clip the last bead at its end. Pitch is start-to-start spacing, not the unwelded gap. Reversing the guide changes the starting end. A closed guide is traversed once, without wrapping.
        - `length_mm` number, required
        - `pitch_mm` number, required
        - `offset_mm` number
      - `path_points_mm` V1WeldPoint[], nullable — Ordered seam polyline in millimetres, in the analyzed assembly model's Z-up coordinate frame (before GLTF axis conversion or viewer scaling). GET the design's weld_candidates_url for located paths. Its length must match weld_length_mm within 0.01 mm or one part per million for a continuous weld. Required for a ready DFM report or quote. Omitting it returns a blocking weld_path_required finding; no location is invented. With stitch, this is the full guide; only the repeated beads are welded and priced.
        - `x` number, required
        - `y` number, required
        - `z` number, required
      - `part_instance_ids` string[], required
      - `weld_finish` 'none' | 'rough' | 'fine'
      - `joint_access` 'open' | 'tight' | 'blind'
    - `accepted_risks` string[] — Findings the customer accepts responsibility for. Holes or countersinks near a bend may distort when the part is formed; listing the code here turns that finding into a warning (`accepted: true`) so the part can be quoted and ordered.
  - `configuration_updated_at` string, date-time, nullable
  - `model_url` string, nullable — Token-authorized download of the whole-design model.
  - `part_model_urls` object — Token-authorized formed-model download per part id.
  - `part_flat_model_urls` object

## Other responses

- `404` — The resource does not exist or is not visible to the caller.
- `410` — The link has expired.
- `422` — Validation failed; see `error.param` and `error.details`.
- `429` — Rate limit exceeded; retry after the `Retry-After` header.
- `500` — Unexpected failure; safe to retry with the same Idempotency-Key.

## Changes

- **2026-09-11** `5810b934dd3b` — 1 info
  - added the optional property `design/parts/items/analysis_status` to the response with the `200` status
- **2026-09-09** `88467239cf6a` — 2 info
  - added the optional property `design/part_instances/items/model_part_id` to the response with the `200` status
  - added the optional property `design/parts/items/tube/anyOf[subschema #1: V1TubeAnalysis]/holes_coordinate_frame` to the response with the `200` status
- **2026-09-07** `35a1cd3bea64` — 2 breaking, 5 info
  - the response property `configuration/assembly_operations/items/weld_length_mm` became optional for the status `200`
  - response property `configuration/assembly_operations/items/weld_length_mm` list-of-types was widened by adding types `null` to media type `application/json` of response `200`
  - added the optional property `configuration/assembly_operations/items/stitch` to the response with the `200` status
  - added the optional property `design/preview_error` to the response with the `200` status
  - …3 more
- **2026-09-06** `b7e901150c5c` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/rmfg/apis/fastapi/changes/v1/review-pages/:access_token/get.md)

---

[API](https://skmtc.dev/rmfg/apis/fastapi.md) · [All operations](https://skmtc.dev/rmfg/apis/fastapi/llms.txt) · [OpenAPI document](https://skmtc.dev/rmfg/apis/fastapi/revisions/737527fc081e?raw)
