Sign Customiser

Navigation

Dark mode

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).

POST/api/v3/customisers/{customiser_id}/font-tiers
POSTCreate a font tier
POST/api/v3/customisers/{customiser_id}/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). 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

The Authorization header expects a Bearer token. Generate one on the API keys page in your dashboard.

Path

The customiser id, from the list customisers operation.

Body
Create a font tier

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 the Authorization header.

Required scope: pricing:write

Path parameters

customiser_idstringpathrequired

The customiser id.

Example: 1

Request body

letter_pricing_modestringbody
namestringbody
rowsarraybody

Request body example

application/json
{
  "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
      }
    }
  ]
}
Create a font tier
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
      }
    }
  ]
}'
Response
{
  "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 a question and press Enter. Use the arrow keys to move between the results.