Customiser presets
Update a preset
Applies an RFC 7396 JSON Merge Patch to one preset: properties omitted
from the body are unchanged. design replaces wholesale — it is one
document, not a set of properties to merge into — so sending it replaces
the whole snapshot. An empty object {} is a valid no-op.
Overview
Read-only and
unknown properties are rejected, and code never changes. 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.
Authorisation
Bearer token required. Include it in theAuthorization header.
Required scope: customisers:write
Path parameters
The customiser id.
Example: 1
The preset id.
Example: 31
Request body
Request body example
{
"name": "Neon script in pink",
"design": {
"colour": 18,
"font": 4,
"text": "Open"
}
}curl https://web.signcustomiser.com/api/v3/customisers/1/presets/31 \
--request PATCH \
--header 'Accept: application/json' \
--header 'Authorization: Bearer YOUR_API_TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"name": "Neon script in pink",
"design": {
"colour": 18,
"font": 4,
"text": "Open"
}
}'{
"data": {
"object": "preset",
"id": 31,
"customiser_id": 42,
"name": "Neon script in pink",
"code": "a1b2c3d4e5f6",
"design": {
"colour": 18,
"font": 4,
"text": "Open"
},
"created_at": "2026-08-14T00:00:00Z",
"updated_at": "2026-08-14T00:05:00Z"
},
"links": {
"self": "https://web.signcustomiser.com/api/v3/customisers/42/presets/31",
"documentation": "https://www.signcustomiser.com/help/api/"
},
"meta": {
"api_version": "v3",
"request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
}{
"type": "https://www.signcustomiser.com/help/api/problems/malformed_json",
"title": "Malformed JSON",
"status": 400,
"code": "malformed_json",
"detail": "The request body is not valid JSON: Syntax error.",
"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/preset_design_not_supported",
"title": "Preset design not supported",
"status": 422,
"code": "preset_design_not_supported",
"detail": "This preset's stored design is a JSON list rather than the object a customiser restores from, so no write can round-trip it.",
"errors": [
{
"pointer": "/design",
"code": "preset_design_not_supported",
"detail": "This preset's stored design is not a JSON object."
}
],
"request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}{
"type": "https://www.signcustomiser.com/help/api/problems/validation_failed",
"title": "Validation failed",
"status": 422,
"code": "validation_failed",
"detail": "The request payload failed validation.",
"errors": [
{
"pointer": "/code",
"code": "invalid",
"detail": "The code field is read-only and cannot be sent on a write."
}
],
"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"
}