Sign Customiser

Applies an RFC 7396 JSON Merge Patch to one letter type: properties omitted from the body are unchanged, and null clears a nullable property (description, shape). letter_parts is an array and is replaced wholesale. Read-only and unknown fields are rejected — sending one at all is a 422, whatever its value.

PATCH/api/v3/customisers/{customiser_id}/letter-types/{letter_type_id}

Overview

An empty object {} is a valid no-op. The patched result must still be renderable, so a patch that would leave no active letter part, clear a lightbox letter type's shape, or set a shape on any other category is refused. Requires customisers:write. An Idempotency-Key is optional here: sending one makes the update safe to retry (an exact repeat replays the original response; the same key with a different body is a 409). The update clears the customiser's cached storefront configuration and runs the advisory language sync, and never regenerates Shopify products, product images, or the product cache. Dropping a part from letter_parts does not delete the colour selection that part already carries — it stops the customiser offering it, and releases the guard that would otherwise refuse the letter-part delete.

Authorisation

Bearer token required. Include it in theAuthorization header.

Required scope: customisers:write

Path parameters

customiser_idstringpathrequired

The customiser id.

Example: 1

letter_type_idstringpathrequired

The letter type id.

Example: 7

Request body

shapestringbody
letter_partsarraybody
price_multiplier_targetstringbody
namestringbody
descriptionstringbody
base_priceintegerbody
price_multipliernumberbody

Request body example

application/json
{
  "shape": "rectangle",
  "letter_parts": [
    {
      "letter_part": "face",
      "active": true
    }
  ],
  "price_multiplier_target": "base_letter_price",
  "name": "Front lit",
  "description": "Light through the face",
  "base_price": 500,
  "price_multiplier": 1.2
}
Update a letter type
curl https://web.signcustomiser.com/api/v3/customisers/1/letter-types/7 \
  --request PATCH \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer YOUR_API_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "shape": "rectangle",
  "letter_parts": [
    {
      "letter_part": "face",
      "active": true
    }
  ],
  "price_multiplier_target": "base_letter_price",
  "name": "Front lit",
  "description": "Light through the face",
  "base_price": 500,
  "price_multiplier": 1.2
}'
Response
{
  "data": {
    "object": "letter_type",
    "id": 7,
    "customiser_id": 42,
    "name": "Front lit",
    "description": "Light through the face",
    "shape": null,
    "letter_parts": [
      {
        "letter_part": "face",
        "active": true
      }
    ],
    "base_price": 500,
    "currency": "USD",
    "price_multiplier": 1,
    "price_multiplier_target": "base_letter_price",
    "sort_order": 1,
    "image_url": null,
    "created_at": "2026-08-13T00:00:00Z",
    "updated_at": "2026-08-13T00:05:00Z"
  },
  "links": {
    "self": "https://web.signcustomiser.com/api/v3/customisers/42/letter-types/7",
    "documentation": "https://www.signcustomiser.com/help/api/"
  },
  "meta": {
    "api_version": "v3",
    "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
  }
}