# PATCH Update a length pricing

Applies an RFC 7396 JSON Merge Patch to one length pricing: properties omitted from the body are unchanged, and the nested `shipping` object merges member by member. `rows` is an array, so sending it replaces every row wholesale. Read-only and unknown fields are rejected. An empty object `{}` is a valid no-op. Requires `pricing:write`. One exception to wholesale replacement protects per-position pricing: a row resent without `price_per_letter_by_position` keeps the schedule it already had, because dropping a schedule by forgetting to echo it would silently reprice a sign. Send `price_per_letter_by_position: null` to clear one deliberately. The dimension limits, the volumetric divisor, and the rate each row owes its letter pricing method are judged against the state the patch would leave behind, so switching an existing price list to volumetric shipping, or to a different `letter_pricing_method`, is refused unless the rows it already has can carry it. An `Idempotency-Key` is optional here: sending one makes the update safe to retry (an exact repeat replays the original response; the same key with a different body is a 409). The update clears the customiser's cached storefront configuration and runs the advisory language sync, and never regenerates Shopify products, product images, or the product cache.

- Source URL: https://www.signcustomiser.com/help/api/v3-patch-update-a-length-pricing/
- Markdown URL: https://www.signcustomiser.com/help/api/v3-patch-update-a-length-pricing.md
- Group: Customiser length pricings
- Method: PATCH
- Path: /api/v3/customisers/{customiser_id}/length-pricings/{length_pricing_id}
- Auth: Bearer token
- Required scopes: `pricing:write`

## Path parameters

- customiser_id (string, required): The customiser id. Example: 1
- length_pricing_id (string, required): The length pricing id. Example: 1

## Body parameters

- name (string, optional): No description provided.
- shipping (object, optional): No description provided.
- rows (array, optional): No description provided.

## Request body example

```json
{
  "name": "Standard",
  "shipping": {
    "calculation": "volumetric",
    "volumetric_divisor": 5000
  },
  "rows": [
    {
      "base_price": 4700,
      "width_limit_cm": 120,
      "height_limit_cm": 60,
      "price_per_letter": 600
    }
  ]
}
```

## cURL example

```bash
curl https://web.signcustomiser.com/api/v3/customisers/1/length-pricings/1 \
  --request PATCH \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer YOUR_API_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "Standard",
  "shipping": {
    "calculation": "volumetric",
    "volumetric_divisor": 5000
  },
  "rows": [
    {
      "base_price": 4700,
      "width_limit_cm": 120,
      "height_limit_cm": 60,
      "price_per_letter": 600
    }
  ]
}'
```

## Response examples

### 200 PATCH 200 example 1

```json
{
  "data": {
    "object": "length_pricing",
    "id": 9,
    "customiser_id": 42,
    "name": "Standard",
    "letter_pricing_mode": "every_letter_cost",
    "letter_pricing_method": "fixed_letter",
    "shipping": {
      "calculation": "volumetric",
      "volumetric_divisor": 5000,
      "add_weight_to_product": false
    },
    "currency": "USD",
    "rows": [
      {
        "base_price": 4700,
        "width_limit_cm": 120,
        "height_limit_cm": 60,
        "length_limit_cm": null,
        "price_per_sq_cm": null,
        "fixed_length_cm": null,
        "width_modifier": null,
        "height_modifier": null,
        "length_modifier": null,
        "max_price_multiplier": null,
        "price_per_cm": null,
        "price_per_letter": null,
        "price_per_letter_by_position": null
      }
    ],
    "created_at": "2026-08-13T00:00:00Z",
    "updated_at": "2026-08-13T00:05:00Z"
  },
  "links": {
    "self": "https://web.signcustomiser.com/api/v3/customisers/42/length-pricings/9",
    "documentation": "https://www.signcustomiser.com/help/api/"
  },
  "meta": {
    "api_version": "v3",
    "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
  }
}
```

### 400 Malformed JSON body

```json
{
  "type": "https://www.signcustomiser.com/help/api/problems/malformed_json",
  "title": "Malformed JSON",
  "status": 400,
  "code": "malformed_json",
  "detail": "The request body is not valid JSON: Syntax error.",
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```

### 401 Missing API key

```json
{
  "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"
}
```

### 403 Insufficient scope

```json
{
  "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"
}
```

### 404 Unknown length pricing

```json
{
  "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"
}
```

### 409 Idempotency conflict

```json
{
  "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"
}
```

### 413 Request body too large

```json
{
  "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"
}
```

### 422 Missing volumetric divisor

```json
{
  "type": "https://www.signcustomiser.com/help/api/problems/validation_failed",
  "title": "Validation failed",
  "status": 422,
  "code": "validation_failed",
  "detail": "Volumetric shipping divides the boxed volume by a divisor, so shipping.volumetric_divisor is required whenever the calculation is volumetric.",
  "errors": [
    {
      "pointer": "/shipping/volumetric_divisor",
      "code": "volumetric_divisor_required",
      "detail": "A volumetric shipping calculation must carry a divisor."
    }
  ],
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```

### 429 Option write budget exhausted

```json
{
  "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"
}
```
