> For the complete documentation index, see [llms.txt](https://agpt.co/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://agpt.co/docs/integrations/block-integrations/designs.md).

# Rmfg Designs

Blocks that upload a STEP file to RMFG for analysis and read the resulting design. Analysis is the first step of every quote: it splits an assembly into unique parts and detects bends, holes and the suggested manufacturing process.

## RMFG Analyze Design

### What it is

Uploads a STEP file to RMFG, a manufacturer that makes and ships real sheet-metal and tube-laser parts, and returns its analyzed parts: the first step before a live quote, cart or order. Works on a URL, an attached workspace file or a data URI

### How it works

Reads the input file through the platform's media pipeline (a URL, data URI or workspace file), appends `.step` to the recorded name unless it already ends in `.step` or `.stp`, and uploads it as multipart form data to `/v1/analyze` with an `Idempotency-Key` (defaulting to the node execution ID), so a retried run returns the same design instead of a duplicate. The request asks RMFG to hold the connection for up to 20 seconds; with `wait_for_ready` on, the block then polls with growing delays, capped by `timeout_seconds`, until the design is `ready` or `failed`.

A `failed` analysis (for example a file that is not a solid body) raises `RMFG design_failed: Analysis failed: <reason>`; running out of time raises `Timed out after Ns waiting for design <id>; fetch it again later with its ID`, and any HTTP error is reported as `RMFG <code>: <message>`. `review_url` and `image_url` are only emitted once RMFG has assigned them, and `part` is emitted once per unique part, so a design that is still queued has no parts yet.

### Inputs

| Input            | Description                                                                                   | Type       | Required |
| ---------------- | --------------------------------------------------------------------------------------------- | ---------- | -------- |
| file             | STEP or STP file to analyze (URL, data URI or workspace file)                                 | str (file) | Yes      |
| file\_name       | Name to record for the upload; defaults to the file's own.                                    | str        | No       |
| wait\_for\_ready | Poll until analysis finishes instead of returning at once.                                    | bool       | No       |
| timeout\_seconds | How long to wait for analysis when wait\_for\_ready is on.                                    | int        | No       |
| idempotency\_key | Stable key so a retried upload returns the same design. Defaults to this node execution's ID. | str        | No       |

### Outputs

| Output      | Description                                                                                          | Type                                            |
| ----------- | ---------------------------------------------------------------------------------------------------- | ----------------------------------------------- |
| error       | Error message if the request failed                                                                  | str                                             |
| design      | The design resource                                                                                  | Design                                          |
| design\_id  | ID to pass to DFM, quote and cart                                                                    | str                                             |
| status      | queued, processing, ready or failed                                                                  | "queued" \| "processing" \| "ready" \| "failed" |
| parts       | Every unique part with its instance count, once ready                                                | List\[Part]                                     |
| part        | One part at a time                                                                                   | Part                                            |
| part\_ids   | Part IDs in the same order                                                                           | List\[str]                                      |
| review\_url | Website page where a person can inspect and configure the design; emitted once RMFG has assigned one | str                                             |
| image\_url  | Rendered picture of the whole design; emitted once analysis is ready                                 | str                                             |

### Possible use case

**Customer STEP Upload**: Analyze an emailed STEP file and show the customer each unique part and its instance count before quoting.

**Assembly Breakdown**: Split an assembly into unique parts so every one can be configured and priced.

**Fire and Forget**: Upload with `wait_for_ready` off and let a `design.ready` webhook continue the graph.

***

## RMFG Get Design

### What it is

Fetches an RMFG design and its analyzed parts by ID

### How it works

Fetches `/v1/designs/{id}` and emits the same outputs as Analyze Design. With `wait_for_ready` on it polls until analysis leaves `queued`/`processing`, bounded by `timeout_seconds`, which is useful after an upload with waiting off or a run that timed out.

An unknown ID is reported as `RMFG not_found_error: <message>`. A design whose analysis failed raises `RMFG design_failed` with the reason when waiting, or is returned with `status` `failed` when not. `review_url` and `image_url` are emitted only when present.

### Inputs

| Input            | Description                                                | Type | Required |
| ---------------- | ---------------------------------------------------------- | ---- | -------- |
| design\_id       | Design ID from Analyze Design                              | str  | Yes      |
| wait\_for\_ready | Poll until analysis finishes instead of returning at once. | bool | No       |
| timeout\_seconds | How long to wait for analysis when wait\_for\_ready is on. | int  | No       |

### Outputs

| Output      | Description                                                                                          | Type                                            |
| ----------- | ---------------------------------------------------------------------------------------------------- | ----------------------------------------------- |
| error       | Error message if the request failed                                                                  | str                                             |
| design      | The design resource                                                                                  | Design                                          |
| design\_id  | ID to pass to DFM, quote and cart                                                                    | str                                             |
| status      | queued, processing, ready or failed                                                                  | "queued" \| "processing" \| "ready" \| "failed" |
| parts       | Every unique part with its instance count, once ready                                                | List\[Part]                                     |
| part        | One part at a time                                                                                   | Part                                            |
| part\_ids   | Part IDs in the same order                                                                           | List\[str]                                      |
| review\_url | Website page where a person can inspect and configure the design; emitted once RMFG has assigned one | str                                             |
| image\_url  | Rendered picture of the whole design; emitted once analysis is ready                                 | str                                             |

### Possible use case

**Webhook Continuation**: Load the parts after a `design.ready` event using the event's `resource_id`.

**Resume After Timeout**: Re-read a large design that Analyze Design gave up waiting for.

**Part ID Lookup**: Re-fetch a design's `part_ids` before building a per-part configuration.

***


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://agpt.co/docs/integrations/block-integrations/designs.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
