# POST Validate deleting a customiser language

Dry-run a language delete without removing anything. The response on the failing paths is exactly the problem the delete would return — the same lifecycle guard and reference check run, only the removal is skipped. On a language that would delete, the response is a 200 `customiser_language_validation` confirmation. Nothing is written, no caches are touched, no idempotency key is consumed, and no activity is recorded. The verdict is advisory: nothing binds it to a later delete, and the language can legitimately change between the two calls. Requires the `customisers:write` scope, because it is the write dry-run twin. 401, 403, 404, 409, 422, and 429 problems behave exactly as on the delete operation.

- Source URL: https://www.signcustomiser.com/help/api/v3-post-validate-deleting-a-customiser-language/
- Markdown URL: https://www.signcustomiser.com/help/api/v3-post-validate-deleting-a-customiser-language.md
- Group: Customiser languages
- Method: POST
- Path: /api/v3/customisers/{customiser_id}/languages/{language_code}/validate-delete
- Auth: Bearer token
- Required scopes: `customisers:write`

## Path parameters

- customiser_id (string, required): The customiser id, from the list customisers operation. Example: 1
- language_code (string, required): The language tag, from the list customiser languages operation. Example: fr

## cURL example

```bash
curl https://web.signcustomiser.com/api/v3/customisers/1/languages/fr/validate-delete \
  --request POST \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer YOUR_API_TOKEN'
```

## Response examples

### 200 Delete would apply

```json
{
  "data": {
    "object": "customiser_language_validation",
    "operation": "delete",
    "customiser_id": 42,
    "language_code": "fr",
    "valid": true
  },
  "links": {
    "self": "https://web.signcustomiser.com/api/v3/customisers/42/languages/fr/validate-delete",
    "documentation": "https://www.signcustomiser.com/help/api/"
  },
  "meta": {
    "api_version": "v3",
    "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, but the API key grants the following scopes: customisers:read. Create a key that includes the required scope in the merchant admin under Integrate → API Tokens.",
  "required_scopes": [
    "customisers:write"
  ],
  "granted_scopes": [
    "customisers:read"
  ],
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```

### 422 Sole published default language

```json
{
  "type": "https://www.signcustomiser.com/help/api/problems/language_not_deletable",
  "title": "Language not deletable",
  "status": 422,
  "code": "language_not_deletable",
  "detail": "A customiser must always keep one published default language, because it is the copy the storefront falls back to. Publish another language and make it the default before removing this one.",
  "reason": "default_language",
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```
