Sign Customiser

Navigation

Dark mode

Partially update the customiser's pricing with a JSON Merge Patch (RFC 7396) of the canonical document: the request body is a JSON object containing only the properties to change.

PATCH/api/v3/customisers/{customiser_id}/pricing
PATCHUpdate customiser pricing
PATCH/api/v3/customisers/{customiser_id}/pricing

Update customiser pricing

Partially update the customiser's pricing with a JSON Merge Patch (RFC 7396) of the canonical document: the request body is a JSON object containing only the properties to change. Properties omitted from the patch are unchanged; a null value removes a property (for example `{"sheet_pricing": null}` removes the backing-sheet section); arrays are replaced wholesale — to change one size or price list row, send the complete new array (each entry carrying its size_id or price_list_id to update in place). A merge patch can never edit one array element by itself. The patched result is validated and persisted as a full replacement, so the field rules, read-only descriptor guards, deletion semantics, and error catalogue are exactly those of the replace operation; field semantics and per-model document shapes are documented on the read operation. An empty object `{}` is a valid no-op. Requires the `pricing:write` scope. A successful update immediately reprices the storefront: the customiser's cached configuration is invalidated and translated language content is resynchronised. Send an `Idempotency-Key` header (1-255 visible ASCII characters, e.g. a UUID) to make the write safe to retry: repeating the same key with the same body replays the original response (marked `Idempotency-Replay: true`) without executing again; the same key with a different body is a 409 problem with code `idempotency_key_conflict`; keys are retained for at least 24 hours and are scoped to your credential, the HTTP method, and the path. A 422 problem with code `invalid_document` means the patch body is not a JSON object. All other failures match the replace operation: `validation_failed` (pointers into the patched document plus `allowed_values` on enum violations), `unknown_field`, `legacy_pricing_model`, 409 `resource_in_use`, 409 idempotency conflicts, 400 `malformed_json`, and 401/403/404/429.

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
Update customiser pricing

Overview

Properties omitted from the patch are unchanged; a null value removes a property (for example {"sheet_pricing": null} removes the backing-sheet section); arrays are replaced wholesale — to change one size or price list row, send the complete new array (each entry carrying its size_id or price_list_id to update in place). A merge patch can never edit one array element by itself. The patched result is validated and persisted as a full replacement, so the field rules, read-only descriptor guards, deletion semantics, and error catalogue are exactly those of the replace operation; field semantics and per-model document shapes are documented on the read operation. An empty object {} is a valid no-op. Requires the pricing:write scope. A successful update immediately reprices the storefront: the customiser's cached configuration is invalidated and translated language content is resynchronised. Send an Idempotency-Key header (1-255 visible ASCII characters, e.g. a UUID) to make the write safe to retry: repeating the same key with the same body replays the original response (marked Idempotency-Replay: true) without executing again; the same key with a different body is a 409 problem with code idempotency_key_conflict; keys are retained for at least 24 hours and are scoped to your credential, the HTTP method, and the path. A 422 problem with code invalid_document means the patch body is not a JSON object. All other failures match the replace operation: validation_failed (pointers into the patched document plus allowed_values on enum violations), unknown_field, legacy_pricing_model, 409 resource_in_use, 409 idempotency conflicts, 400 malformed_json, and 401/403/404/429.

Authorisation

Bearer token required. Include it in the Authorization header.

Required scope: pricing:write

Path parameters

customiser_idstringpathrequired

The customiser id, from the list customisers operation.

Example: 1

Request body

base_pricingobjectbody

Request body example

application/json
{
  "base_pricing": {
    "mode": "included_in_price_lists"
  }
}
Update customiser pricing
curl https://web.signcustomiser.com/api/v3/customisers/1/pricing \
  --request PATCH \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer YOUR_API_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "base_pricing": {
    "mode": "included_in_price_lists"
  }
}'
Response
{
  "data": {
    "object": "customiser_pricing",
    "customiser_id": 42,
    "pricing_model": "simple_letter",
    "pricing_model_display_name": "Simple Letter",
    "currency": "USD",
    "sizes": [
      {
        "size_id": 7,
        "client_key": null,
        "name": "Small",
        "description": "Up to 50cm wide",
        "sort_order": 1,
        "char_limit": 20,
        "line_limit": 3,
        "min_char": 1,
        "width_cm": 50,
        "height_cm": null,
        "line_height_cm": 12,
        "width_multiplier": null,
        "length_cm": null,
        "sizing_strategy": "fixed_width",
        "height_measurement_mode": "line_height"
      }
    ],
    "base_pricing": {
      "mode": "included_in_price_lists",
      "rows": []
    },
    "price_lists": [
      {
        "price_list_id": 10,
        "name": "Standard",
        "letter_pricing_mode": "price_by_position",
        "rows": [
          {
            "size_id": 7,
            "size_key": null,
            "base_price": {
              "line_1": 1000,
              "line_2": 1200,
              "line_3": 1400
            },
            "letter_price": {
              "line_1": 100,
              "line_2": 120,
              "line_3": 140
            },
            "letter_price_by_position": {
              "line_1": [
                0,
                100
              ],
              "line_2": [
                0,
                120
              ],
              "line_3": [
                0,
                140
              ]
            }
          }
        ]
      }
    ],
    "sheet_pricing": null
  },
  "links": {
    "self": "https://web.signcustomiser.com/api/v3/customisers/42/pricing",
    "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.