Sign Customiser

Lists the customiser's sizes in the order the storefront presents them (sort_order, then id). Every length is in centimetres, and the field names match the sizes embedded in the pricing document, because they are the same rows.

GET/api/v3/customisers/{customiser_id}/sizes

Overview

Fields the customiser's pricing model never reads are published as null — an advanced-letter customiser prices by width_multiplier and reports no centimetre dimensions, a frame-fit one prices by width_cm and height_cm and reports no multiplier. Requires customisers:read. Follow links.next while pagination.has_more is true, sending each cursor back unchanged. The operation is read-only and always safe to retry. A customiser still on the deprecated fixed-height pricing model keeps its current sizes in the legacy fixed-height sizes resource instead; this collection then reports only whatever leftover rows the customiser carries, which the delete operation exists to clear.

Authorisation

Bearer token required. Include it in theAuthorization header.

Required scope: customisers:read

Path parameters

customiser_idstringpathrequired

The customiser id, from the list customisers operation.

Example: 1

Query parameters

limitstringquery

Page size from 1 to 100. Defaults to 20.

Example: 20

List sizes
curl https://web.signcustomiser.com/api/v3/customisers/1/sizes?limit=20&cursor= \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer YOUR_API_TOKEN'
Response200
{
  "data": [
    {
      "object": "size",
      "id": 7,
      "customiser_id": 42,
      "name": "Small",
      "description": null,
      "char_limit": 12,
      "line_limit": 1,
      "min_char": 1,
      "width_cm": 40,
      "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": null,
      "sort_order": 1,
      "created_at": "2026-08-13T00:00:00Z",
      "updated_at": "2026-08-13T00:00:00Z"
    }
  ],
  "pagination": {
    "has_more": false,
    "next_cursor": null
  },
  "links": {
    "self": "https://web.signcustomiser.com/api/v3/customisers/42/sizes",
    "documentation": "https://www.signcustomiser.com/help/api/",
    "next": null
  },
  "meta": {
    "api_version": "v3",
    "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:read scope.",
  "required_scopes": [
    "customisers:read"
  ],
  "granted_scopes": [
    "store: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"
}
Response422
{
  "type": "https://www.signcustomiser.com/help/api/problems/invalid_parameter",
  "title": "Invalid query parameter",
  "status": 422,
  "code": "invalid_parameter",
  "detail": "The limit parameter must be an integer between 1 and 100.",
  "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": 60,
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}