---
title: "Update a design"
method: PUT
path: "/v3/backoffice/design/{id}"
tags: ["Design"]
---

# Update a design

`PUT /v3/backoffice/design/{id}`

## Request

- Base URL: `https://api.rhinoartisan.com`
- URL: `https://api.rhinoartisan.com/v3/backoffice/design/{id}`
- Auth: API key in header `apikey`
- TypeScript: <https://skmtc.dev/rhinoartisan/apis/rhinoartisan-api/docs/v3/backoffice/design/:id/put.ts> (a function with typed inputs; its response is checked against the schema)

Updates name, description, the semantic sentence and/or the full list of collections. `draft_id` replaces the geometry with a newer solve (the draft is consumed). Only the provided fields change.

## Path parameters

- `id` integer, required

## Request body

- object
  - `name` string
  - `description` string, nullable
  - `semantic` string, nullable: The piece in one sentence; the engine writes it on compute, Merchandising can polish it.
  - `draft_id` integer: A draft from /v3/compute/solve whose compute result replaces this design's.
  - `collection_ids` integer[]
  - `notes` string, nullable: Internal retailer notes (max 5000), stored with the author and date. Empty or null removes them. Never sent to the Showroom.
  - `badge` string, nullable: Merchandising label over the photo: new, bestseller, essential, limited or free text (max 30). Empty or null removes it.
  - `display_name` string, nullable: The name the store's customer sees (max 80). Empty or null: the store shows `name`.
  - `reference` string, nullable: The store reference (SKU, max 40), unique in the organization: 409 REFERENCE_TAKEN when another design has it. Empty or null removes it.
  - `tags` string[]: The retailer's own words for the piece (vintage, gift, everyday…), found by the showroom search. Up to 20, 30 characters each, trimmed and deduplicated; the full list replaces the previous one.
  - `design_type` string, nullable: Piece type, a RhinoArtisan Outliner code (RING, EARRING, PENDANT, NECKLACE, BRACELET, COMPONENT). null clears it (and the subtype).
  - `design_subtype` string, nullable: Subtype, one of the type's (RING_SOLITAIRE_BASKET, ETERNITY_BAND, WEDDING_BAND_DIAMOND...). Without design_type it keeps the current type, or takes the subtype's.
  - `pricing` object, nullable: Edit the stored setting price by hand: `cost` (manufacturer) and `markup_percentage`, optionally `currency`. null clears it.
    - `cost` number
    - `markup_percentage` number
    - `currency` string

## Response `200`

Design updated

## Other responses

- `404`: DESIGN_NOT_FOUND | DRAFT_NOT_FOUND

## Changes

- **2026-10-15** `598bac108453`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/rhinoartisan/apis/rhinoartisan-api/changes/v3/backoffice/design/:id/put.md)

---

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