---
title: "Create"
method: POST
path: "/v1/bend-programs"
tags: ["manufacturing-v1"]
---

# Create

`POST /v1/bend-programs`

## Request

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

Queue independent bend generation for a prepared DFM part. Poll the returned
url or subscribe to bend_program.completed / bend_program.failed webhooks.
Retries with the same Idempotency-Key reuse the same saved resource.

## Headers

- `Idempotency-Key` string, nullable

## Request body

- V1SavedBendProgramCreate
  - `dfm_id` string, required
  - `part_id` string, required

## Response `200`

Existing completed or failed program returned for this Idempotency-Key.

- V1SavedBendProgram: Durable bend generation resource. A completed run can still find collisions.
  - `id` string, required
  - `object` 'bend_program'
  - `status` 'queued' | 'processing' | 'completed' | 'failed', required
  - `progress` V1BendGenerationProgress
    - `stage` 'preparing_geometry' | 'searching_setups' | 'saving_preview', required
    - `started_at` string, date-time, required
  - `url` string, required
  - `dfm_id` string, required
  - `part_id` string, required
  - `created_at` string, date-time, required
  - `completed_at` string, date-time, nullable, required
  - `program` V1SavedBendProgramSummary, required
    - `bend_count` integer, required
    - `setup_count` integer, required
    - `tooling_changes` integer, required
    - `url` string, required
  - `checks` V1SavedBendChecksSummary, required
    - `status` 'pending' | 'passed_sampled' | 'needs_review' | 'unavailable', required
    - `warning_count` integer, required
    - `collision_count` integer, required
    - `url` string, required
  - `preview` V1SavedBendPreview, required
    - `viewer_url` string, required
    - `asset_url` string, nullable, required
    - `format` 'glb'
    - `size_bytes` integer, nullable, required
  - `source` object, nullable, required
  - `error` object, nullable, required
  - `hardware_order` object, nullable: When the part has studs, nuts or standoffs: whether they are pressed before (`hardware_first`) or after (`bending_first`) bending, checked against the press brake and the PEM press with the real fastener models. `manufacturable: false` means neither order works. `animations` links a GLB for each order and step, whether it passes or crashes: `pem` (the PEM press, flat or formed) and `bending` (the press brake run, with or without the hardware installed).
  - `machine_ready` false

## Other responses

- `202`: Successful Response
- `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
  - added the optional property `hardware_order` to the response with the `200` status
  - added the optional property `hardware_order` to the response with the `202` status
- **2026-09-28** `3568b01e288d`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/rmfg/apis/rmfg-manufacturing-api/changes/v1/bend-programs/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)
