---
title: "Replace a design (keeps history)"
method: PUT
path: "/v1/designs/{id}"
tags: ["Designs"]
---

# Replace a design (keeps history)

`PUT /v1/designs/{id}`

## Request

- Base URL: `https://electronics-architect.com`
- URL: `https://electronics-architect.com/v1/designs/{id}`
- Auth: HTTP bearer

Scope: `write`. The previous state is snapshotted into the revision history with the key's label as the author ("via key nightly-optimizer"), exactly as a save in the editor snapshots the state it replaces.

## Request body

- object
  - `name` string
  - `design` Design, required (unresolved $ref)
  - `message` string: A note describing the design you are SENDING. It is stored with this state and travels with it into the revision history when a later save replaces it; it does not label the state you are replacing.

## Response `200`

Updated.

- DesignUpdated
  - `id` string
  - `name` string
  - `version` integer: The live design's version after this update: a new design is 1 and every update adds 1. The state it replaced is kept as revision version − 1.
  - `updatedAt` string, date-time
  - `revisionAuthor` string
  - `editorUrl` string: The deep link that opens this design on the canvas (`/app?design=<id>`), where the change is flagged as this key's and the previous state is one click away.

## Other responses

- `400`: VALIDATION_FAILED or INVALID_REQUEST.
- `401`: No key, a browser token instead of a key, an unknown key, or a revoked key (code KEY_REVOKED).
- `403`: The key lacks a required scope (INSUFFICIENT_SCOPE), or the call needs a plan the account does not have (PLAN_REQUIRED): on the Free plan, compare, exports, Monte Carlo jobs, AI synthesis, a design with more than one sheet, or a save, share or key past the Free limits; or a team key whose team is no longer paid for.
- `404`: NOT_FOUND.
- `413`: PAYLOAD_TOO_LARGE.
- `429`: RATE_LIMITED: the key's per-minute allowance is used up (or, before any key is recognised, too many requests from one address presented an unknown or revoked key). On the routes that solve inside the request (solve, verify, derating, compare, exports, ai/review, ai/synthesize) it can also be SOLVE_IN_PROGRESS: this account already has 3 calls of that kind running on the server that took the request (solves, AI reviews and syntheses are each counted separately). `Retry-After` is set either way; for SOLVE_IN_PROGRESS it is 2 s for solves and 30 s for AI reviews and syntheses.

---

[API](https://skmtc.dev/electronics-architect/apis/electronics-architect-api.md) · [All operations](https://skmtc.dev/electronics-architect/apis/electronics-architect-api/llms.txt) · [OpenAPI document](https://skmtc.dev/electronics-architect/apis/electronics-architect-api/revisions/98066184ba67?raw)
