# POST Validate an icon update

Dry-runs the merge patch without persisting anything, returning the same problems the update would return or a 200 verdict when it would succeed. A replacement drawing is sanitised so an unsafe one is caught here too, but it is not converted and the icon font is not rebuilt. Nothing is written, no caches are touched, and no idempotency key is consumed. The verdict is advisory. Requires `customisers:write`.

- Source URL: https://www.signcustomiser.com/help/api/v3-post-validate-an-icon-update/
- Markdown URL: https://www.signcustomiser.com/help/api/v3-post-validate-an-icon-update.md
- Group: Customiser icons
- Method: POST
- Path: /api/v3/customisers/{customiser_id}/icons/{icon_id}/validate-update
- Auth: Bearer token
- Required scopes: `customisers:write`

## Path parameters

- customiser_id (string, required): The customiser id. Example: 1
- icon_id (string, required): The icon id. Example: 9

## Body parameters

- name (string, optional): No description provided.

## Request body example

```json
{
  "name": "Heart"
}
```

## cURL example

```bash
curl https://web.signcustomiser.com/api/v3/customisers/1/icons/9/validate-update \
  --request POST \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer YOUR_API_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "Heart"
}'
```

## Response examples

### 200 POST 200 example 1

```json
{
  "data": {
    "object": "icon_validation",
    "operation": "update",
    "customiser_id": 42,
    "icon_id": 9,
    "valid": true
  },
  "links": {
    "self": "https://web.signcustomiser.com/api/v3/customisers/42/icons/9/validate-update",
    "documentation": "https://www.signcustomiser.com/help/api/"
  },
  "meta": {
    "api_version": "v3",
    "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 customisers:write scope.",
  "required_scopes": [
    "customisers:write"
  ],
  "granted_scopes": [
    "customisers:read"
  ],
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```

### 404 Unknown icon

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

### 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 Unsafe SVG

```json
{
  "type": "https://www.signcustomiser.com/help/api/problems/validation_failed",
  "title": "Validation failed",
  "status": 422,
  "code": "validation_failed",
  "detail": "The icon SVG could not be sanitised safely.",
  "errors": [
    {
      "pointer": "/svg",
      "code": "invalid_svg",
      "detail": "The icon SVG could not be sanitised safely."
    }
  ],
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```

### 429 Rate limited

```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": 60,
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```
