Sign Customiser

Navigation

Dark mode

Dry-run a pricing replacement without persisting anything.

POST/api/v3/customisers/{customiser_id}/pricing/validate
POSTValidate customiser pricing
POST/api/v3/customisers/{customiser_id}/pricing/validate

Validate customiser pricing

Dry-run a pricing replacement without persisting anything. The request body is the full canonical document, exactly as the replace operation accepts it, and the response is exactly what that replace would produce: on an invalid document, the identical 422 problem (`validation_failed` with pointers and `allowed_values`, `unknown_field`, or `legacy_pricing_model`); on a document whose omissions would delete referenced records, the identical 409 `resource_in_use` problem; and on a valid document, a 200 `pricing_validation` confirmation — the same validation code path runs, only persistence is skipped. Nothing is written, no caches are touched, and no idempotency key is consumed, so the operation is always safe to repeat. To dry-run a PATCH, fetch the document, apply your merge patch locally (RFC 7396), and validate the result. Requires the `pricing:write` scope (it is the write's dry-run twin). A 400 problem means the body is not valid JSON; a 422 problem with code `invalid_document` means the body is not a JSON object. 401/403/404/429 behave as on the read operation.

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

Overview

The request body is the full canonical document, exactly as the replace operation accepts it, and the response is exactly what that replace would produce: on an invalid document, the identical 422 problem (validation_failed with pointers and allowed_values, unknown_field, or legacy_pricing_model); on a document whose omissions would delete referenced records, the identical 409 resource_in_use problem; and on a valid document, a 200 pricing_validation confirmation — the same validation code path runs, only persistence is skipped. Nothing is written, no caches are touched, and no idempotency key is consumed, so the operation is always safe to repeat. To dry-run a PATCH, fetch the document, apply your merge patch locally (RFC 7396), and validate the result. Requires the pricing:write scope (it is the write's dry-run twin). A 400 problem means the body is not valid JSON; a 422 problem with code invalid_document means the body is not a JSON object. 401/403/404/429 behave as on the read operation.

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

price_listsarraybody
sizesarraybody
base_pricingobjectbody

Request body example

application/json
{
  "price_lists": [
    {
      "price_list_id": 10,
      "name": "Standard",
      "letter_pricing_mode": "every_letter_cost",
      "shipping": [],
      "rows": [
        {
          "size_id": 7,
          "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
            ]
          },
          "price_per_letter_by_position": [
            0,
            100,
            125
          ]
        }
      ]
    }
  ],
  "sizes": [],
  "base_pricing": {
    "mode": "included_in_price_lists",
    "rows": [
      {
        "size_id": 7,
        "base_price": {
          "line_1": 900,
          "line_2": 1000,
          "line_3": 1100
        }
      }
    ]
  }
}
Validate customiser pricing
curl https://web.signcustomiser.com/api/v3/customisers/1/pricing/validate \
  --request POST \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer YOUR_API_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "price_lists": [
    {
      "price_list_id": 10,
      "name": "Standard",
      "letter_pricing_mode": "every_letter_cost",
      "shipping": [],
      "rows": [
        {
          "size_id": 7,
          "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
            ]
          },
          "price_per_letter_by_position": [
            0,
            100,
            125
          ]
        }
      ]
    }
  ],
  "sizes": [],
  "base_pricing": {
    "mode": "included_in_price_lists",
    "rows": [
      {
        "size_id": 7,
        "base_price": {
          "line_1": 900,
          "line_2": 1000,
          "line_3": 1100
        }
      }
    ]
  }
}'
Response
{
  "data": {
    "object": "pricing_validation",
    "customiser_id": 42,
    "valid": true
  },
  "links": {
    "self": "https://web.signcustomiser.com/api/v3/customisers/42/pricing/validate",
    "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.