Customiser length pricings
Duplicate a length pricing
Copies one length pricing, with its shipping settings and every row and
price, into a new length pricing on the same customiser, the same as the
merchant admin's Duplicate. The copy is named name, or "Copy of <name>"
when the body has no name, cut to 255 characters.
Overview
Nothing uses the copy
until a font or the settings point at it, so the duplicate changes no
storefront price.
On an advanced_letter customiser, to give AI Sign Designer its own
prices, duplicate the price list that AI designs pay from, then set the
settings icon_length_pricing_id to the copy. Sheet pricing
belongs to the pricing document and cannot be duplicated here: its id is
a 404.
The customiser must price by advanced_letter or frame_fit, as for a
create, or the duplicate is refused with a 422 pricing_model_mismatch.
Through the API a frame_fit customiser holds one price list, because
the pricing document holds exactly one, so its duplicate is refused with
price_list_limit_reached. Requires pricing:write and
an Idempotency-Key; retrying the same request and key replays the
original response and makes no second copy. The write clears the
customiser's cached storefront configuration and runs the advisory
language sync, spends one unit of the option-write budget, and never
regenerates Shopify products.
Authorisation
Bearer token required. Include it in the Authorization header.
Required scope: pricing:write
Path parameters
The customiser id.
Example: 1
The id of the length pricing to copy.
Example: 1
Request body
Request body example
{
"name": "Standard (AI Sign Designer)"
}curl https://web.signcustomiser.com/api/v3/customisers/1/length-pricings/1/duplicate \
--request POST \
--header 'Accept: application/json' \
--header 'Authorization: Bearer YOUR_API_TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"name": "Standard (AI Sign Designer)"
}'{
"data": {
"object": "length_pricing",
"id": 10,
"customiser_id": 42,
"name": "Standard (AI Sign Designer)",
"letter_pricing_mode": "every_letter_cost",
"letter_pricing_method": "material_length",
"shipping": {
"calculation": "physical",
"volumetric_divisor": null,
"add_weight_to_product": false
},
"currency": "USD",
"rows": [
{
"base_price": 4500,
"width_limit_cm": 120,
"height_limit_cm": 60,
"length_limit_cm": null,
"price_per_sq_cm": null,
"price_per_sq_cm_basis": "per_sq_cm",
"fixed_length_cm": null,
"width_modifier": null,
"height_modifier": null,
"length_modifier": null,
"max_price_multiplier": null,
"price_per_cm": 1.25,
"price_per_letter": null,
"price_per_letter_by_position": null
}
],
"created_at": "2026-11-14T00:00:00Z",
"updated_at": "2026-11-14T00:00:00Z"
},
"links": {
"self": "https://web.signcustomiser.com/api/v3/customisers/42/length-pricings/10",
"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 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": "Through the API a frame-fit customiser holds one price list, because the customiser pricing document holds exactly one. Update the existing one instead.",
"errors": [
{
"pointer": "",
"code": "price_list_limit_reached",
"detail": "This customiser already has the one price list the API allows for its pricing model."
}
],
"request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}{
"type": "https://www.signcustomiser.com/help/api/problems/pricing_model_mismatch",
"title": "Pricing model mismatch",
"status": 422,
"code": "pricing_model_mismatch",
"detail": "A length pricing is used only by a customiser that prices by advanced_letter or frame_fit, and this customiser prices by simple_letter.",
"errors": [
{
"pointer": "",
"code": "pricing_model_mismatch",
"detail": "This customiser's pricing model does not use length pricing rows."
}
],
"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": "/name",
"code": "max",
"detail": "The name field must not be greater than 255 characters."
}
],
"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"
}