Sign Customiser

Customiser support finishes

Create a support finish

Copy page

Adds a support finish to the customiser, at the end of the current presentation order. name and backboard_ids are required — backboard_ids because a finish no backboard offers is unreachable in the storefront, and every id must be one of this customiser's backboards.

POST/api/v3/customisers/{customiser_id}/support-finishes

Overview

Every other field has a documented default (finish_kind colour, opacity 1, applied_to_visualisation true, min_size_rule any, base_price 0, price_multiplier 1, price_multiplier_target base_letter_price). Image fields are read-only until the upload surface ships, layers is not writable, and sort_order moves only through the reorder operation — naming any of them is a 422. A finish must be renderable: a colour finish needs a hexcode (422 colour_value_required), and the texture kind is refused with a 422 texture_image_required until image upload ships. Requires customisers:write and an Idempotency-Key. The write clears the customiser's cached storefront configuration and runs the advisory language sync. It never regenerates Shopify products, product images, or the product cache, so live listings are untouched. Option writes also spend one unit of a separate per-key option-write budget; exhausting it returns a 429 with retry_after.

Authorisation

Bearer token required. Include it in theAuthorization header.

Required scope: customisers:write

Path parameters

customiser_idstringpathrequired

The customiser id.

Example: 1

Request body

finish_kindstringbody
min_size_rulestringbody
price_multiplier_targetstringbody
namestringbody
descriptionstringbody
hexcodestringbody
opacityintegerbody
applied_to_visualisationbooleanbody
backboard_idsarraybody
base_priceintegerbody
price_multipliernumberbody

Request body example

application/json
{
  "finish_kind": "colour",
  "min_size_rule": "any",
  "price_multiplier_target": "base_letter_price",
  "name": "Gloss Black",
  "description": "A deep gloss black",
  "hexcode": "#111111",
  "opacity": 1,
  "applied_to_visualisation": true,
  "backboard_ids": [
    11
  ],
  "base_price": 500,
  "price_multiplier": 1.2
}
Create a support finish
curl https://web.signcustomiser.com/api/v3/customisers/1/support-finishes \
  --request POST \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer YOUR_API_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "finish_kind": "colour",
  "min_size_rule": "any",
  "price_multiplier_target": "base_letter_price",
  "name": "Gloss Black",
  "description": "A deep gloss black",
  "hexcode": "#111111",
  "opacity": 1,
  "applied_to_visualisation": true,
  "backboard_ids": [
    11
  ],
  "base_price": 500,
  "price_multiplier": 1.2
}'
Response201
{
  "data": {
    "object": "support_finish",
    "id": 27,
    "customiser_id": 42,
    "name": "Gloss Black",
    "description": null,
    "finish_kind": "colour",
    "hexcode": "#111111",
    "opacity": 1,
    "applied_to_visualisation": true,
    "backboard_ids": [
      11
    ],
    "min_width_cm": null,
    "min_height_cm": null,
    "min_size_rule": "any",
    "base_price": 0,
    "currency": "USD",
    "price_multiplier": 1,
    "price_multiplier_target": "base_letter_price",
    "sort_order": 1,
    "preview_image_url": null,
    "example_image_url": null,
    "texture_image_url": null,
    "created_at": "2026-08-13T00:00:00Z",
    "updated_at": "2026-08-13T00:00:00Z"
  },
  "links": {
    "self": "https://web.signcustomiser.com/api/v3/customisers/42/support-finishes/27",
    "documentation": "https://www.signcustomiser.com/help/api/"
  },
  "meta": {
    "api_version": "v3",
    "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
  }
}
Response400
{
  "type": "https://www.signcustomiser.com/help/api/problems/missing_idempotency_key",
  "title": "Missing idempotency key",
  "status": 400,
  "code": "missing_idempotency_key",
  "detail": "Provide an Idempotency-Key header for this write.",
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
Response401
{
  "type": "https://www.signcustomiser.com/help/api/problems/missing_api_key",
  "title": "Missing API key",
  "status": 401,
  "code": "missing_api_key",
  "detail": "Provide a store API key as a bearer token.",
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
Response403
{
  "type": "https://www.signcustomiser.com/help/api/problems/insufficient_scope",
  "title": "Insufficient scope",
  "status": 403,
  "code": "insufficient_scope",
  "detail": "This operation requires the customisers:write scope.",
  "required_scopes": [
    "customisers:write"
  ],
  "granted_scopes": [
    "customisers:read"
  ],
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
Response404
{
  "type": "https://www.signcustomiser.com/help/api/problems/resource_not_found",
  "title": "Resource not found",
  "status": 404,
  "code": "resource_not_found",
  "detail": "The requested resource does not exist or does not belong to the authenticated store.",
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
Response409
{
  "type": "https://www.signcustomiser.com/help/api/problems/idempotency_key_conflict",
  "title": "Idempotency key conflict",
  "status": 409,
  "code": "idempotency_key_conflict",
  "detail": "This Idempotency-Key was already used for a different request body on this operation.",
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
Response413
{
  "type": "https://www.signcustomiser.com/help/api/problems/request_too_large",
  "title": "Request too large",
  "status": 413,
  "code": "request_too_large",
  "detail": "The request body must not exceed 2 MiB.",
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
Response422
{
  "type": "https://www.signcustomiser.com/help/api/problems/unknown_field",
  "title": "Unknown field",
  "status": 422,
  "code": "unknown_field",
  "detail": "The request contains fields this operation does not define: /material_type.",
  "errors": [
    {
      "pointer": "/material_type",
      "code": "unknown_field",
      "detail": "The field \"material_type\" is not supported by this operation."
    }
  ],
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
Response429
{
  "type": "https://www.signcustomiser.com/help/api/problems/rate_limited",
  "title": "Too many requests",
  "status": 429,
  "code": "rate_limited",
  "detail": "You have exceeded the request limit for this API key.",
  "retry_after": 37,
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}