Sign Customiser

Applies an RFC 7396 JSON Merge Patch to one size: properties omitted from the body are unchanged, and null clears a nullable property. Read-only and unknown fields are rejected, as is any field the customiser's pricing model does not read.

PATCH/api/v3/customisers/{customiser_id}/sizes/{size_id}

Overview

An empty object {} is a valid no-op. Requires customisers:write. The patch is judged on the state it would leave behind, so clearing a dimension the pricing model prices by is refused even when the body only names that one field. 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

customiser_idstringpathrequired

The customiser id.

Example: 1

size_idstringpathrequired

The size id.

Example: 1

Request body

namestringbody
descriptionstringbody
char_limitintegerbody
line_limitintegerbody
min_charintegerbody
width_cmintegerbody
height_cmintegerbody
line_height_cmintegerbody
length_cmintegerbody
width_multipliernumberbody
border_margin_cmnumberbody

Request body example

application/json
{
  "name": "Small",
  "description": "Fits a shop window",
  "char_limit": 12,
  "line_limit": 1,
  "min_char": 1,
  "width_cm": 40,
  "height_cm": 20,
  "line_height_cm": 10,
  "length_cm": 120,
  "width_multiplier": 1.5,
  "border_margin_cm": 5.08
}
Update a size
curl https://web.signcustomiser.com/api/v3/customisers/1/sizes/1 \
  --request PATCH \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer YOUR_API_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "Small",
  "description": "Fits a shop window",
  "char_limit": 12,
  "line_limit": 1,
  "min_char": 1,
  "width_cm": 40,
  "height_cm": 20,
  "line_height_cm": 10,
  "length_cm": 120,
  "width_multiplier": 1.5,
  "border_margin_cm": 5.08
}'
Response200
{
  "data": {
    "object": "size",
    "id": 7,
    "customiser_id": 42,
    "name": "Medium",
    "description": "Fits a shop window",
    "char_limit": 12,
    "line_limit": 1,
    "min_char": 1,
    "width_cm": 60,
    "height_cm": null,
    "line_height_cm": 10,
    "length_cm": null,
    "width_multiplier": null,
    "sizing_strategy": "fixed_width",
    "height_measurement_mode": "line_height",
    "border_margin_cm": 5.08,
    "sort_order": 1,
    "created_at": "2026-08-13T00:00:00Z",
    "updated_at": "2026-08-13T00:05:00Z"
  },
  "links": {
    "self": "https://web.signcustomiser.com/api/v3/customisers/42/sizes/7",
    "documentation": "https://www.signcustomiser.com/help/api/"
  },
  "meta": {
    "api_version": "v3",
    "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
  }
}
Response400
{
  "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"
}
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/validation_failed",
  "title": "Validation failed",
  "status": 422,
  "code": "validation_failed",
  "detail": "The request payload failed validation.",
  "errors": [
    {
      "pointer": "/size_id",
      "code": "prohibited",
      "detail": "The size_id field is prohibited."
    }
  ],
  "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"
}