Customiser mountings
Create a mounting
Adds a mounting to the customiser, at the end of the current presentation
order. Only name is required; every other field has a documented default
(visualisation none, no letter parts, both exclusion arrays empty,
base_price 0, price_multiplier 1, price_multiplier_target
base_letter_price).
Overview
The *_pct proportions belong to one visualisation each, so a body naming
one the mounting's visualisation would never read is a 422 on that field.
excluded_colour_ids and excluded_backboard_ids must name the
customiser's own colours and backboards — an id from another customiser or
another store is a 422 on the offending element. Image fields are
read-only until the upload surface ships, and sort_order moves only
through the reorder operation; naming either is a 422.
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
The customiser id.
Example: 1
Request body
Request body example
{
"visualisation": "screw",
"letter_parts": [
"top"
],
"price_multiplier_target": "base_letter_price",
"name": "Wall Screws",
"description": "Four stainless screws and wall plugs",
"pedestal_pole_width_pct": 18,
"pedestal_base_depth_pct": 100,
"sign_feet_base_depth_pct": 180,
"sign_feet_post_height_pct": 10,
"sign_feet_inset_pct": 15,
"excluded_colour_ids": [
3
],
"excluded_backboard_ids": [
11
],
"base_price": 500,
"price_multiplier": 1.2
}curl https://web.signcustomiser.com/api/v3/customisers/1/mountings \
--request POST \
--header 'Accept: application/json' \
--header 'Authorization: Bearer YOUR_API_TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"visualisation": "screw",
"letter_parts": [
"top"
],
"price_multiplier_target": "base_letter_price",
"name": "Wall Screws",
"description": "Four stainless screws and wall plugs",
"pedestal_pole_width_pct": 18,
"pedestal_base_depth_pct": 100,
"sign_feet_base_depth_pct": 180,
"sign_feet_post_height_pct": 10,
"sign_feet_inset_pct": 15,
"excluded_colour_ids": [
3
],
"excluded_backboard_ids": [
11
],
"base_price": 500,
"price_multiplier": 1.2
}'{
"data": {
"object": "mounting",
"id": 8,
"customiser_id": 42,
"name": "Wall Screws",
"description": null,
"visualisation": "screw",
"pedestal_pole_width_pct": null,
"pedestal_base_depth_pct": null,
"sign_feet_base_depth_pct": null,
"sign_feet_post_height_pct": null,
"sign_feet_inset_pct": null,
"letter_parts": [],
"excluded_colour_ids": [],
"excluded_backboard_ids": [],
"base_price": 0,
"currency": "USD",
"price_multiplier": 1,
"price_multiplier_target": "base_letter_price",
"sort_order": 1,
"image_url": null,
"button_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/mountings/8",
"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/validation_failed",
"title": "Validation failed",
"status": 422,
"code": "validation_failed",
"detail": "The screw visualisation is not drawn from pedestal_pole_width_pct, so the value would never be read. Omit the field, or set the visualisation that reads it.",
"errors": [
{
"pointer": "/pedestal_pole_width_pct",
"code": "field_not_used_by_visualisation",
"detail": "The pedestal_pole_width_pct field is not used by this mounting's visualisation."
}
],
"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"
}