---
title: "Get Design Resource"
method: GET
path: "/v1/designs/{design_id}"
tags: ["manufacturing-v1"]
---

# Get Design Resource

`GET /v1/designs/{design_id}`

## Path parameters

- `design_id` string, required

## Query parameters

- `include_review_link` boolean — Include a website review link. Upload polling can skip this work.

## Response `200`

Successful Response

- V1Design
  - `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

## Other responses

- `401` — Missing or invalid credentials.
- `403` — The credentials do not permit this operation.
- `404` — The resource does not exist or is not visible to the caller.
- `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-30** `d104f57cc985` — 1 info
  - added the new optional `query` request parameter `include_review_link`
- **2026-09-11** `5810b934dd3b` — 1 info
  - added the optional property `parts/items/analysis_status` to the response with the `200` status
- **2026-09-09** `88467239cf6a` — 2 info
  - added the optional property `part_instances/items/model_part_id` to the response with the `200` status
  - added the optional property `parts/items/tube/anyOf[subschema #1: V1TubeAnalysis]/holes_coordinate_frame` to the response with the `200` status
- **2026-09-07** `35a1cd3bea64` — 4 info
  - added the optional property `preview_error` to the response with the `200` status
  - added the optional property `preview_status` to the response with the `200` status
  - added the optional property `preview_url` to the response with the `200` status
  - added the optional property `weld_candidates_url` to the response with the `200` status
- **2026-09-06** `b7e901150c5c` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/rmfg/apis/fastapi/changes/v1/designs/:design_id/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)
