Customiser backboards
Create a backboard
Adds a backboard to the customiser, at the end of the current
presentation order. Only name is required; every other field has a
documented default (backboard_type null, letter_type_ids empty,
allow_multilayer false, base_price 0, price_multiplier 1,
price_multiplier_target base_letter_price).
Overview
On a channel customiser
outside the cut-out family, letter_type_ids is required and must name
at least one of the customiser's own letter types, because a backboard no
letter type offers is unreachable in the storefront.
Image fields, the uploaded shape and everything derived from it
(geometry, custom_shape, padding), and the multilayer layers
definitions are read-only here, and sort_order moves only through the
reorder operation — naming any of them is a 422. The shape has its own
slot, PUT .../backboards/{backboard_id}/shape. backboard_type cannot be set to custom_shape or
cutout on a create: those draw the board from an uploaded shape, and a
create has no row to attach one to yet. Create the backboard, attach its
shape with PUT .../backboards/{backboard_id}/shape, then set the type.
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
{
"backboard_type": "board",
"price_multiplier_target": "base_letter_price",
"name": "Clear Acrylic Panel",
"description": "A 5mm clear acrylic panel",
"letter_type_ids": [
3
],
"outline_size": 8,
"allow_multilayer": false,
"custom_background_enabled": false,
"show_custom_background": false,
"base_price": 500,
"price_multiplier": 1.2,
"price_per_sq_cm": 0.022
}curl https://web.signcustomiser.com/api/v3/customisers/1/backboards \
--request POST \
--header 'Accept: application/json' \
--header 'Authorization: Bearer YOUR_API_TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"backboard_type": "board",
"price_multiplier_target": "base_letter_price",
"name": "Clear Acrylic Panel",
"description": "A 5mm clear acrylic panel",
"letter_type_ids": [
3
],
"outline_size": 8,
"allow_multilayer": false,
"custom_background_enabled": false,
"show_custom_background": false,
"base_price": 500,
"price_multiplier": 1.2,
"price_per_sq_cm": 0.022
}'{
"data": {
"object": "backboard",
"id": 11,
"customiser_id": 42,
"name": "Clear Acrylic Panel",
"description": null,
"backboard_type": "board",
"letter_type_ids": [],
"outline_size": null,
"allow_multilayer": false,
"custom_background_enabled": false,
"show_custom_background": false,
"base_price": 0,
"currency": "USD",
"price_multiplier": 1,
"price_multiplier_target": "base_letter_price",
"price_per_sq_cm": null,
"sort_order": 1,
"image_url": null,
"button_image_url": null,
"geometry": {
"has_custom_shape": false,
"status": null,
"failure_reason": null,
"measured_at": 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/backboards/11",
"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": "A custom_shape backboard is drawn from an uploaded shape, and this backboard has none. Attach one with PUT /api/v3/customisers/{customiser_id}/backboards/{backboard_id}/shape first.",
"errors": [
{
"pointer": "/backboard_type",
"code": "custom_shape_required",
"detail": "A custom_shape backboard needs an uploaded shape, and this backboard has none."
}
],
"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"
}