Customiser letter parts
Create a letter part's colour
Adds a colour to this letter part's colour selection, at the end of its presentation order.
Overview
The body, the defaults, and the renderability rules
are the customiser colours family's, unchanged: name is required, a
single colour needs a hexcode and a multi or flow colour needs
multi_colour_hexcodes (422 colour_value_required), and the
custom_texture finish is refused until image upload ships. The letter
part must already have a colour selection — create one through the
letter-part routes first. 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. Option writes also spend one unit of a
separate per-key option-write budget.
Authorisation
Bearer token required. Include it in theAuthorization header.
Required scope: customisers:write
Path parameters
The customiser id.
Example: 1
The letter type id.
Example: 7
The letter part.
Example: face
Request body
Request body example
{
"colour_type": "single",
"texture": "flat",
"min_size_rule": "any",
"price_multiplier_target": "base_letter_price",
"name": "Warm White",
"description": "Our warmest white",
"hexcode": "#FFEEDD",
"multi_colour_hexcodes": [
"#FF0000",
"#00FF00"
],
"base_price": 500,
"price_multiplier": 1.2
}curl https://web.signcustomiser.com/api/v3/customisers/1/letter-types/7/letter-parts/face/colours \
--request POST \
--header 'Accept: application/json' \
--header 'Authorization: Bearer YOUR_API_TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"colour_type": "single",
"texture": "flat",
"min_size_rule": "any",
"price_multiplier_target": "base_letter_price",
"name": "Warm White",
"description": "Our warmest white",
"hexcode": "#FFEEDD",
"multi_colour_hexcodes": [
"#FF0000",
"#00FF00"
],
"base_price": 500,
"price_multiplier": 1.2
}'{
"data": {
"object": "colour",
"id": 31,
"customiser_id": 42,
"name": "Warm White",
"description": null,
"colour_type": "single",
"hexcode": "#FFEEDD",
"multi_colour_hexcodes": null,
"texture": "flat",
"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,
"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/letter-types/7/letter-parts/face/colours/31",
"documentation": "https://www.signcustomiser.com/help/api/"
},
"meta": {
"api_version": "v3",
"request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
}{
"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"
}{
"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"
}{
"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"
}{
"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"
}{
"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"
}{
"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"
}{
"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: /colour.",
"errors": [
{
"pointer": "/colour",
"code": "unknown_field",
"detail": "The field \"colour\" is not supported by this operation."
}
],
"request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}{
"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"
}