---
title: "Create Cart"
method: POST
path: "/v1/carts"
tags: ["manufacturing-v1"]
---

# Create Cart

`POST /v1/carts`

## Request

- Base URL: `https://api.rmfg.com`
- URL: `https://api.rmfg.com/v1/carts`
- Auth: HTTP bearer

Create a priced cart and a website link a person can pay from.

The cart is quoted immediately with the same rules as `POST /v1/quotes`.
Choose a `shipping_option_id` from `quote.fulfillment.shipping_options`
(now or with `PATCH`) to complete `totals`.

## Headers

- `Idempotency-Key` string, nullable

## Request body

- V1CartCreateRequest: Create a cart: the quote basket plus checkout choices.
  - `items` V1QuoteItemRequest[], required: Up to 100 configured cart line items; quantity does not count toward this limit.
    - `generate_production_files` boolean: Prepare production files asynchronously from this same manufacturing evaluation.
    - `design_id` string, required
    - `quantity` integer: Completed units of this design.
    - `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, and holes or cutouts smaller than the material thickness (`feature_too_small_for_thickness`) are hard to laser cut cleanly; listing the code here turns that finding into a warning (`accepted: true`) so the part can be quoted and ordered.
      - `recommended_finish` boolean: Give every part that sets no `finish_id` (and no powder coat) the finish RMFG recommends for the design: deburring, else tumbling, when every part and its material are eligible; otherwise As Cut. Each part's `finish_id` and `finish_recommended` in the DFM report show what was applied. An explicit `finish_id`, including null for As Cut, is always kept.
    - `client_reference_id` string, nullable
    - `quantity_options` integer[]: Up to ten alternative quantities to price alongside `quantity`. Each is returned in `quantity_options[]` with its unit and total price for this exact configuration; the quote's own totals and fulfillment still use `quantity`.
  - `ship_to` V1ShipTo
    - `name` string, required
    - `company` string, nullable
    - `street1` string, required
    - `street2` string, nullable
    - `city` string, required
    - `state` string, required
    - `postal_code` string, required
    - `country` 'US'
    - `phone` string, nullable
    - `email` string, nullable
    - `liftgate` boolean, nullable: Freight only. true when the receiver has no loading dock or forklift and needs a liftgate truck; false when they can unload from the trailer. Omit to let RMFG assume from the address type (verified commercial: no liftgate; residential or unverified: liftgate).
  - `shipping_option_id` string, nullable: `id` of a `fulfillment.shipping_options[]` entry from the cart's quote. Encodes both carrier service and production speed.
  - `client_reference_id` string, nullable

## Response `201`

Cart created.

- V1Cart: A server-side basket a human can open, review, and pay on the website. The cart re-quotes on every change; `quote` is the latest priced result. `cart_url` embeds an unguessable token, so anyone holding the link can check out.
  - `id` string, required
  - `revision` integer
  - `object` 'cart'
  - `status` 'open' | 'checked_out' | 'expired', required
  - `cart_url` string, required
  - `items` V1QuoteItemRequest[], required
    - `generate_production_files` boolean: Prepare production files asynchronously from this same manufacturing evaluation.
    - `design_id` string, required
    - `quantity` integer: Completed units of this design.
    - `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, and holes or cutouts smaller than the material thickness (`feature_too_small_for_thickness`) are hard to laser cut cleanly; listing the code here turns that finding into a warning (`accepted: true`) so the part can be quoted and ordered.
      - `recommended_finish` boolean: Give every part that sets no `finish_id` (and no powder coat) the finish RMFG recommends for the design: deburring, else tumbling, when every part and its material are eligible; otherwise As Cut. Each part's `finish_id` and `finish_recommended` in the DFM report show what was applied. An explicit `finish_id`, including null for As Cut, is always kept.
    - `client_reference_id` string, nullable
    - `quantity_options` integer[]: Up to ten alternative quantities to price alongside `quantity`. Each is returned in `quantity_options[]` with its unit and total price for this exact configuration; the quote's own totals and fulfillment still use `quantity`.
  - `ship_to` V1ShipTo
    - `name` string, required
    - `company` string, nullable
    - `street1` string, required
    - `street2` string, nullable
    - `city` string, required
    - `state` string, required
    - `postal_code` string, required
    - `country` 'US'
    - `phone` string, nullable
    - `email` string, nullable
    - `liftgate` boolean, nullable: Freight only. true when the receiver has no loading dock or forklift and needs a liftgate truck; false when they can unload from the trailer. Omit to let RMFG assume from the address type (verified commercial: no liftgate; residential or unverified: liftgate).
  - `shipping_option_id` string, nullable
  - `selected_shipping_option` V1ShippingOption
    - `id` string, required
    - `production_speed` 'standard' | 'expedited', required
    - `carrier` string, required
    - `service` string, required
    - `amount_cents` integer, required
    - `production_surcharge_cents` integer
    - `planned_ship_date` string, date, required
    - `estimated_delivery_date` string, date, nullable
    - `delivery_days` integer, nullable
    - `delivery_date_guaranteed` boolean
    - `requires_freight` boolean
    - `rate_source` 'live' | 'estimated', required
    - `oversized_ground` boolean
    - `quote_details` object, nullable: Freight rating inputs and selected carrier response, excluding credentials and account numbers.
    - `explanation` string
  - `quote` V1Quote, required: An immutable priced evaluation of a basket of designs. Quotes never select a shipping option or compute tax; each `fulfillment.shipping_options[].amount_cents` is additive at order time. To change a quote, create a new one.
    - `id` string, required
    - `object` 'quote'
    - `api_version` '2026-09-01'
    - `dfm_ruleset_version` string
    - `status` 'processing' | 'requires_input' | 'ready' | 'blocked' | 'expired' | 'failed', required
    - `status_url` string, required
    - `design_id` string, nullable
    - `currency` 'usd'
    - `amount_subtotal_cents` integer, nullable: Sum of `items[].amount_cents`.
    - `amount_shipping_cents` integer, nullable: Null: no shipping option is selected on a quote.
    - `amount_tax_cents` integer, nullable: Null: tax is calculated at order time.
    - `amount_total_cents` integer, nullable: `amount_subtotal_cents` + `amount_shipping_cents` + `amount_tax_cents`, treating null as 0.
    - `items` V1QuotedDesign[]
      - `pricing_token` string, nullable: Owner-bound pricing snapshot, valid for five minutes. Use quotes.reprice for quantity-only edits; checkout still requires a full quote.
      - `design_id` string, required
      - `quantity` integer, required: Completed units of the design.
      - `status` 'requires_input' | 'ready' | 'blocked'
      - `client_reference_id` string, nullable
      - `quantity_options` V1QuantityOption[]: Prices at the alternative quantities requested in `quantity_options`, for the same configuration.
        - `quantity` integer, required
        - `unit_amount_cents` integer, required
        - `amount_cents` integer, required
        - `line_items` V1QuoteLineItem[]
          - `part_id` string, required
          - `process` 'sheet_metal' | 'tube_laser', required
          - `quantity` integer, required: Manufactured parts: design quantity × `instance_count`.
          - `unit_amount_cents` integer, required: Effective price per manufactured part after discounts, including operations.
          - `amount_cents` integer, required: Exact line total. Unit amounts are rounded averages when batch fees do not divide evenly.
          - `discounts` V1LineItemDiscount[]
            - `type` 'quantity', required
            - `percent` number, required
            - `unit_amount_cents` integer, required: Reduction per manufactured part.
            - `amount_cents` integer, required: `unit_amount_cents` × `quantity`.
          - `breakdown` V1LineItemBreakdown[]
            - `type` 'base' | 'bends' | 'taps' | 'studs' | 'nuts' | 'standoffs' | 'countersinks' | 'powder_coat' | 'finish', required
            - `unit_amount_cents` integer, required
            - `amount_cents` integer, required
            - `powder_coat_costs` V1PowderCoatCostBreakdown: Public batch-cost allocation in integer USD cents.
              - …
          - `material_id` string, nullable
          - `tube_profile_id` string, nullable
          - `pricing_version` string, nullable
          - `pricing` V1PricingMetadata: Which pricing rules produced a number, for audit and reproducibility. Contains only rule identifiers; never costs, margins, or rates.
            - `version` string, required
            - `calculator` string, required
            - `components` object: Pricing component name to the rule version applied.
            - `config_hash` string, required: Fingerprint of the rule set; equal hashes priced identically.
        - `assembly_operations_amount_cents` integer
      - `unit_amount_cents` integer, nullable: `amount_cents` ÷ `quantity`, rounded.
      - `amount_cents` integer, nullable: Sum of `line_items[].amount_cents` plus `assembly_operations_amount_cents`.
      - `assembly_operations_amount_cents` integer
      - `dfm` V1DFMReport, required: An immutable evaluation of one configuration. To act on `requires_input` or `blocked`, submit a new request with the corrected configuration; reports are never updated in place.
        - `id` string, required
        - `object` 'dfm_report'
        - `api_version` '2026-09-01'
        - `dfm_ruleset_version` string
        - `design_id` string, required
        - `configuration_hash` string, required
        - `status` 'requires_input' | 'ready' | 'blocked'
        - `review_url` string, nullable: Website page showing this exact configuration in the 3D configurator, where a person can adjust it and save. Read the saved configuration back with `GET /v1/review-links/{id}`.
        - `review_link_id` string, nullable
        - `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[]
              - …
            - `studs` V1StudOperation[]
              - …
            - `nuts` V1NutOperation[]
              - …
            - `standoffs` V1StandoffOperation[]
              - …
            - `countersinks` V1CountersinkOperation[]
              - …
          - `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.
              - …
            - `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.
              - …
            - `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, and holes or cutouts smaller than the material thickness (`feature_too_small_for_thickness`) are hard to laser cut cleanly; listing the code here turns that finding into a warning (`accepted: true`) so the part can be quoted and ordered.
          - `recommended_finish` boolean: Give every part that sets no `finish_id` (and no powder coat) the finish RMFG recommends for the design: deburring, else tumbling, when every part and its material are eligible; otherwise As Cut. Each part's `finish_id` and `finish_recommended` in the DFM report show what was applied. An explicit `finish_id`, including null for As Cut, is always kept.
        - `parts` V1PartDFM[], required
          - `part_id` string, required
          - `status` 'requires_input' | 'ready' | 'blocked'
          - `finish_id` string, nullable: Finish this part is evaluated and priced with; absent means As Cut.
          - `finish_recommended` boolean: True when `configuration.recommended_finish` chose `finish_id` because the request left this part's finish unset.
          - `issues` V1DFMIssue[]
            - `code` string, required
            - `message` string, required
            - `severity` 'blocking' | 'warning' | 'info'
            - `customer_visible` boolean: False for internal review warnings that customer interfaces must omit.
            - `accepted` boolean: True when the caller listed this finding in `configuration.accepted_risks`.
            - `source` 'geometry' | 'manufacturing_rules', required: `geometry` findings come from analyzing the uploaded file; `manufacturing_rules` findings depend on the selected material, tooling, or operations.
            - `part_id` string, nullable
            - `hole_id` integer, nullable
            - `bend_id` integer, nullable
            - `operation` string, nullable: Configuration field the finding refers to, e.g. `taps`.
            - `details` object: Code-specific measurements. Numeric keys use `_mm`, `_degrees`, `_psi`, or `_tons` suffixes; see the documentation for each code.
          - `capabilities` V1PartCapabilities: Keyed by the configuration field each capability governs.
            - `taps` V1OperationCapability, required
              - …
            - `studs` V1OperationCapability, required
              - …
            - `standoffs` V1OperationCapability
              - …
            - `nuts` V1OperationCapability, required
              - …
            - `countersinks` V1OperationCapability, required
              - …
            - `powder_coat_color_id` V1OperationCapability, required
              - …
            - `finish_id` V1OperationCapability, required
              - …
            - `holes` V1HoleCapabilities[]: Per-hole eligibility; authoritative for hole operations.
              - …
          - `files` V1PartFiles: Stable authenticated links; storage paths remain private.
            - `source_step_url` string, required
            - `normalized_step_url` string, required: The analyzed STEP re-oriented into the coordinate frame used by the returned geometry.
            - `formed_model_url` string, required
            - `flat_pattern_step_url` string, nullable
            - `flat_pattern_model_url` string, nullable
            - `production_step_url` string, nullable
            - `production_model_url` string, nullable
            - `production_flat_step_url` string, nullable
            - `production_flat_model_url` string, nullable
            - `production_dxf_url` string, nullable: Laser-ready DXF of the prepared flat pattern, unfolded with the tooling K-factor. Sheet-metal parts only.
            - `production_bend_lines_dxf_url` string, nullable: The same flat pattern with bend lines drawn; sheet-metal parts with bends.
          - `image_url` string, nullable: Rendered picture of this part with the configured taps, studs, nuts, and countersinks marked on the face they are applied from. Uses the production geometry once it is ready. Accepts the same `view`, `format`, and `width` parameters as design images.
          - `transformations` V1ManufacturingTransformation[]
            - `type` 'hole_diameter_adjustment' | 'bend_radius_adjustment' | 'material_thickness_adjustment' | 'hole_face_inverted', required
            - `code` 'tap_hole_diameter' | 'stud_hole_diameter' | 'nut_hole_diameter' | 'standoff_hole_diameter' | 'countersink_inner_diameter' | 'tooling_bend_radius' | 'stocked_material_thickness' | 'hole_normal_inverted', required
            - `message` string, required
            - `hole_id` integer, nullable
            - `bend_id` integer, nullable
            - `from_mm` number, nullable
            - `to_mm` number, nullable
          - `production_design_id` string, nullable: Identifier of the prepared production geometry once files are ready. Equals `part_id` when the uploaded geometry needed no change.
          - `tooling` V1ProductionTooling: The press-brake setup the production files were prepared for.
            - `k_factor` number, required
            - `bend_radius_mm` number, nullable
            - `punch_id` string, nullable
            - `die_id` string, nullable
            - `calibration_id` string, nullable
          - `bend_input_ready` boolean: Corrected STEP and material calibration are ready for bend planning. May become true while DXF and display models are still processing.
          - `bend_program_id` string, nullable: Saved bend program queued automatically for this part as soon as its bend input became ready. Retrieve it at `/v1/bend-programs/{id}`; no create call is needed.
          - `production_warnings` string[]: Non-blocking notes from file preparation, e.g. DXF checks.
        - `requirements` V1Requirement[]
          - `code` string, required
          - `message` string, required
          - `part_id` string, nullable
          - `part_ids` string[]
          - `field` string, nullable
          - `allowed_values_url` string, nullable
        - `assembly_issues` V1DFMIssue[]
          - `code` string, required
          - `message` string, required
          - `severity` 'blocking' | 'warning' | 'info'
          - `customer_visible` boolean: False for internal review warnings that customer interfaces must omit.
          - `accepted` boolean: True when the caller listed this finding in `configuration.accepted_risks`.
          - `source` 'geometry' | 'manufacturing_rules', required: `geometry` findings come from analyzing the uploaded file; `manufacturing_rules` findings depend on the selected material, tooling, or operations.
          - `part_id` string, nullable
          - `hole_id` integer, nullable
          - `bend_id` integer, nullable
          - `operation` string, nullable: Configuration field the finding refers to, e.g. `taps`.
          - `details` object: Code-specific measurements. Numeric keys use `_mm`, `_degrees`, `_psi`, or `_tons` suffixes; see the documentation for each code.
        - `production_files` V1ProductionFilesStatus, required
          - `status` 'skipped' | 'queued' | 'processing' | 'ready' | 'failed', required
          - `status_url` string, nullable
          - `reason` 'not_requested' | 'disabled_by_request' | 'requirements_missing' | 'dfm_blocked', nullable
          - `error` V1ResourceError
            - `code` string, required
            - `message` string, required
          - `review_warning` V1ManufacturingReviewWarning: An advisory for manual preparation; never a checkout requirement.
            - `design_id` string, required
            - `code` 'bend_radius_review' | 'hole_correction_review' | 'manufacturing_file_review', required
            - `message` string, required
            - `parts` V1ManufacturingReviewPart[]: Parts the manual review will adjust, with the bend radii and thickness the automatic preparation could not apply.
              - …
          - `corrections_applied` boolean
      - `requirements` V1Requirement[]
        - `code` string, required
        - `message` string, required
        - `part_id` string, nullable
        - `part_ids` string[]
        - `field` string, nullable
        - `allowed_values_url` string, nullable
      - `line_items` V1QuoteLineItem[]
        - `part_id` string, required
        - `process` 'sheet_metal' | 'tube_laser', required
        - `quantity` integer, required: Manufactured parts: design quantity × `instance_count`.
        - `unit_amount_cents` integer, required: Effective price per manufactured part after discounts, including operations.
        - `amount_cents` integer, required: Exact line total. Unit amounts are rounded averages when batch fees do not divide evenly.
        - `discounts` V1LineItemDiscount[]
          - `type` 'quantity', required
          - `percent` number, required
          - `unit_amount_cents` integer, required: Reduction per manufactured part.
          - `amount_cents` integer, required: `unit_amount_cents` × `quantity`.
        - `breakdown` V1LineItemBreakdown[]
          - `type` 'base' | 'bends' | 'taps' | 'studs' | 'nuts' | 'standoffs' | 'countersinks' | 'powder_coat' | 'finish', required
          - `unit_amount_cents` integer, required
          - `amount_cents` integer, required
          - `powder_coat_costs` V1PowderCoatCostBreakdown: Public batch-cost allocation in integer USD cents.
            - `setup_amount_cents` integer, required
            - `labor_amount_cents` integer, required
            - `surface_area_amount_cents` integer, required
            - `rack_amount_cents` integer
        - `material_id` string, nullable
        - `tube_profile_id` string, nullable
        - `pricing_version` string, nullable
        - `pricing` V1PricingMetadata: Which pricing rules produced a number, for audit and reproducibility. Contains only rule identifiers; never costs, margins, or rates.
          - `version` string, required
          - `calculator` string, required
          - `components` object: Pricing component name to the rule version applied.
          - `config_hash` string, required: Fingerprint of the rule set; equal hashes priced identically.
      - `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'
      - `pricing_version` string, nullable
      - `pricing` V1PricingMetadata: Which pricing rules produced a number, for audit and reproducibility. Contains only rule identifiers; never costs, margins, or rates.
        - `version` string, required
        - `calculator` string, required
        - `components` object: Pricing component name to the rule version applied.
        - `config_hash` string, required: Fingerprint of the rule set; equal hashes priced identically.
    - `requirements` V1Requirement[]
      - `code` string, required
      - `message` string, required
      - `part_id` string, nullable
      - `part_ids` string[]
      - `field` string, nullable
      - `allowed_values_url` string, nullable
    - `fulfillment` V1FulfillmentEstimate
      - `production` V1ProductionEstimate[], required
        - `speed` 'standard' | 'expedited', required
        - `production_days` integer, required
        - `estimated_ship_date` string, date, required
        - `surcharge_cents` integer
        - `explanation` string[]
      - `shipping_status` 'destination_required' | 'ready' | 'invalid_address' | 'service_unavailable' | 'support_required', required
      - `shipping_options` V1ShippingOption[]
        - `id` string, required
        - `production_speed` 'standard' | 'expedited', required
        - `carrier` string, required
        - `service` string, required
        - `amount_cents` integer, required
        - `production_surcharge_cents` integer
        - `planned_ship_date` string, date, required
        - `estimated_delivery_date` string, date, nullable
        - `delivery_days` integer, nullable
        - `delivery_date_guaranteed` boolean
        - `requires_freight` boolean
        - `rate_source` 'live' | 'estimated', required
        - `oversized_ground` boolean
        - `quote_details` object, nullable: Freight rating inputs and selected carrier response, excluding credentials and account numbers.
        - `explanation` string
      - `requires_freight` boolean
      - `freight_reasons` string[]
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
    - `completed_at` string, date-time, nullable
    - `expires_at` string, date-time, nullable
    - `error` V1ResourceError
      - `code` string, required
      - `message` string, required
  - `totals` V1CartTotals, required: Every amount the website's checkout charges, computed by the API.
    - `amount_subtotal_cents` integer, required: Manufacturing: Σ quote items.
    - `amount_shipping_cents` integer, nullable: Selected shipping option, including the freight surcharge when the order requires LTL. Null until an option is selected.
    - `amount_production_surcharge_cents` integer, nullable: Expedited production fee of the selected option; 0 for standard.
    - `amount_tax_cents` integer, nullable: Sales tax for the destination; see `tax_status`.
    - `tax_status` 'calculated' | 'destination_required' | 'unavailable', required: `unavailable` means tax could not be calculated now and will be charged at checkout.
    - `amount_total_cents` integer, required: Sum of the known amounts above; what checkout will charge before any promotion code.
  - `dfm_run_ids` object: DFM report id per `design_id` whose production files (resized holes, calibrated bends, laser DXF) are prepared for this cart. Poll `GET /v1/dfm/{id}` for `production_files.status`.
  - `designs` V1CartDesignSummary[]
    - `id` string, required
    - `name` string, required
    - `formed_dimensions` V1Dimensions, required
      - `length_mm` number, required
      - `width_mm` number, required
      - `height_mm` number, required
    - `parts` V1CartPartSummary[], required
      - `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
      - `surface_area_cm2` number, nullable
      - `tube_length_mm` number, nullable
  - `manufacturing_warnings` V1ManufacturingReviewWarning[]: Advisories from automatic file preparation. These do not prevent ordering a ready quote.
    - `design_id` string, required
    - `code` 'bend_radius_review' | 'hole_correction_review' | 'manufacturing_file_review', required
    - `message` string, required
    - `parts` V1ManufacturingReviewPart[]: Parts the manual review will adjust, with the bend radii and thickness the automatic preparation could not apply.
      - `part_id` string, required
      - `bends` V1ManufacturingReviewBend[]
        - `bend_id` integer, nullable
        - `designed_radius_mm` number, required: Inside bend radius in the uploaded model.
        - `tooling_radius_mm` number, required: Inside radius the selected material's press-brake tooling produces.
      - `designed_thickness_mm` number, nullable: Thickness of the uploaded model, when it differs from the stock.
      - `stock_thickness_mm` number, nullable: Thickness of the selected sheet, when it differs from the model.
  - `order_id` string, nullable: Set once payment completes.
  - `payment` V1CartPayment
    - `object` 'cart_payment'
    - `cart_id` string, required
    - `status` 'paid' | 'processing' | 'failed' | 'refunded', required
    - `payment_intent_id` string, nullable
    - `amount_total_cents` integer, required
    - `order_id` string, nullable
    - `order_url` string, nullable: `/v1/orders/{order_id}` once the order exists.
    - `paid_at` string, date-time, nullable
  - `client_reference_id` string, nullable
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `expires_at` string, date-time, nullable

## Other responses

- `400`: Malformed request.
- `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.
- `409`: The resource is not ready, or Idempotency-Key was reused with a different request.
- `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.
- `503`: A dependency is temporarily unavailable; retry later.

## Changes

- **2026-10-31** `67d03196d8bf`: 2 info
  - the `dfm_ruleset_version` response's property default value changed from `2026-10-30-v10` to `2026-10-31-v11` for the status `201`
  - the `dfm_ruleset_version` response's property default value changed from `2026-10-30-v10` to `2026-10-31-v11` for the status `201`
- **2026-10-31** `5eaa8ec96bc5`: 2 warning, 5 info
  - added the new `feature_too_small_for_thickness` enum value to the `items/items/configuration/accepted_risks/items/` response property for the response status `201`
  - added the new `feature_too_small_for_thickness` enum value to the `quote/items/items/dfm/configuration/accepted_risks/items/` response property for the response status `201`
  - added the new optional request property `ship_to/anyOf[subschema #1: V1ShipTo]/liftgate`
  - added the new `feature_too_small_for_thickness` enum value to the request property `items/items/configuration/accepted_risks/items/`
  - …3 more
- …earlier changes not shown

[Operation history](https://skmtc.dev/rmfg/apis/rmfg-manufacturing-api/changes/v1/carts/post.md)

---

[API](https://skmtc.dev/rmfg/apis/rmfg-manufacturing-api.md) - [All operations](https://skmtc.dev/rmfg/apis/rmfg-manufacturing-api/llms.txt) - [OpenAPI document](https://skmtc.dev/rmfg/apis/rmfg-manufacturing-api/revisions/078f984358b9?raw)
