Customiser font tiers
Create a font tier
Adds a font tier to the customiser. Only name is required; every other
field has a documented default (letter_pricing_mode every_letter_cost,
rows empty).
Overview
Each row's size_id must name one of the customiser's own
sizes, and carries a base_price and a letter_price map keyed line_1
… line_10 in integer minor units. line_1 to line_3 are required in
both maps, because the pricing document requires them of these same rows;
a higher line the map omits is stored as no price for that line count.
The customiser must price by simple_letter (or the legacy
legacy_fixed_height model): a font tier on any other pricing model is
unreachable, and the write is refused with a 422 pricing_model_mismatch.
Requires pricing:write and an Idempotency-Key. The pricing document
publishes the same tiers as its price_lists and its full replace
deletes any tier the payload omits, so pick one surface per workflow
rather than interleaving the two.
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: pricing:write
Path parameters
The customiser id.
Example: 1
Request body
Request body example
{
"letter_pricing_mode": "every_letter_cost",
"name": "Standard",
"rows": [
{
"size_id": 3,
"base_price": {
"line_1": 2500,
"line_2": 3000,
"line_3": 3500
},
"letter_price": {
"line_1": 400,
"line_2": 450,
"line_3": 500
}
}
]
}curl https://web.signcustomiser.com/api/v3/customisers/1/font-tiers \
--request POST \
--header 'Accept: application/json' \
--header 'Authorization: Bearer YOUR_API_TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"letter_pricing_mode": "every_letter_cost",
"name": "Standard",
"rows": [
{
"size_id": 3,
"base_price": {
"line_1": 2500,
"line_2": 3000,
"line_3": 3500
},
"letter_price": {
"line_1": 400,
"line_2": 450,
"line_3": 500
}
}
]
}'{
"data": {
"object": "font_tier",
"id": 7,
"customiser_id": 42,
"name": "Standard",
"letter_pricing_mode": "every_letter_cost",
"currency": "USD",
"rows": [
{
"size_id": 3,
"base_price": {
"line_1": 2500,
"line_2": null,
"line_3": null,
"line_4": null,
"line_5": null,
"line_6": null,
"line_7": null,
"line_8": null,
"line_9": null,
"line_10": null
},
"letter_price": {
"line_1": 400,
"line_2": null,
"line_3": null,
"line_4": null,
"line_5": null,
"line_6": null,
"line_7": null,
"line_8": null,
"line_9": null,
"line_10": null
},
"letter_price_by_position": 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/font-tiers/7",
"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/pricing_model_mismatch",
"title": "Pricing model mismatch",
"status": 422,
"code": "pricing_model_mismatch",
"detail": "A font tier is only priced by a simple_letter or legacy_fixed_height customiser, and this customiser prices by advanced_letter.",
"errors": [
{
"pointer": "",
"code": "pricing_model_mismatch",
"detail": "This customiser's pricing model does not use font tier rows."
}
],
"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"
}