Customiser length pricings
Update a length pricing
Applies an RFC 7396 JSON Merge Patch to one length pricing: properties
omitted from the body are unchanged, and the nested shipping object
merges member by member. rows is an array, so sending it replaces every
row wholesale. Read-only and unknown fields are rejected.
Overview
An empty object
{} is a valid no-op. Requires pricing:write.
One exception to wholesale replacement protects per-position pricing: a
row resent without price_per_letter_by_position keeps the schedule it
already had, because dropping a schedule by forgetting to echo it would
silently reprice a sign. Send price_per_letter_by_position: null to
clear one deliberately.
The dimension limits, the volumetric divisor, and the rate each row owes
its letter pricing method are judged against the state the patch would
leave behind, so switching an existing price list to volumetric shipping,
or to a different letter_pricing_method, is refused unless the rows it
already has can carry it.
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: pricing:write
Path parameters
The customiser id.
Example: 1
The length pricing id.
Example: 1
Request body
Request body example
{
"name": "Standard",
"shipping": {
"calculation": "volumetric",
"volumetric_divisor": 5000
},
"rows": [
{
"base_price": 4700,
"width_limit_cm": 120,
"height_limit_cm": 60,
"price_per_letter": 600
}
]
}curl https://web.signcustomiser.com/api/v3/customisers/1/length-pricings/1 \
--request PATCH \
--header 'Accept: application/json' \
--header 'Authorization: Bearer YOUR_API_TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"name": "Standard",
"shipping": {
"calculation": "volumetric",
"volumetric_divisor": 5000
},
"rows": [
{
"base_price": 4700,
"width_limit_cm": 120,
"height_limit_cm": 60,
"price_per_letter": 600
}
]
}'{
"data": {
"object": "length_pricing",
"id": 9,
"customiser_id": 42,
"name": "Standard",
"letter_pricing_mode": "every_letter_cost",
"letter_pricing_method": "fixed_letter",
"shipping": {
"calculation": "volumetric",
"volumetric_divisor": 5000,
"add_weight_to_product": false
},
"currency": "USD",
"rows": [
{
"base_price": 4700,
"width_limit_cm": 120,
"height_limit_cm": 60,
"length_limit_cm": null,
"price_per_sq_cm": null,
"fixed_length_cm": null,
"width_modifier": null,
"height_modifier": null,
"length_modifier": null,
"max_price_multiplier": null,
"price_per_cm": null,
"price_per_letter": null,
"price_per_letter_by_position": null
}
],
"created_at": "2026-08-13T00:00:00Z",
"updated_at": "2026-08-13T00:05:00Z"
},
"links": {
"self": "https://web.signcustomiser.com/api/v3/customisers/42/length-pricings/9",
"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 pricing:write scope.",
"required_scopes": [
"pricing:write"
],
"granted_scopes": [
"pricing: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": "Volumetric shipping divides the boxed volume by a divisor, so shipping.volumetric_divisor is required whenever the calculation is volumetric.",
"errors": [
{
"pointer": "/shipping/volumetric_divisor",
"code": "volumetric_divisor_required",
"detail": "A volumetric shipping calculation must carry a divisor."
}
],
"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"
}