Customiser languages
Validate language translations
Dry-run a translation write without persisting anything. The request body is the same body the update accepts, and the response on the failing paths is exactly the problem that update would return — the same key allowlist and the same placeholder checks run, only persistence is skipped.
Overview
On a body that
would apply, the response is a 200
customiser_language_translations_validation confirmation. Nothing is
written, no caches are touched, no idempotency key is consumed, and no
activity is recorded, so the operation is always safe to repeat.
The verdict is advisory: nothing binds it to a later update, and the
catalogue can legitimately change between the two calls. Requires the
customisers:write scope, because it is the write dry-run twin.
A 400 problem means the body is not valid JSON; 422 problems carry the
update own invalid_translation_key, validation_failed, or unknown_field
diagnostics. 401, 403, 404, and 429 problems behave as on the update
operation.
Authorisation
Bearer token required. Include it in theAuthorization header.
Required scope: customisers:write
Path parameters
The customiser id, from the list customisers operation.
Example: 1
The language tag, from the list customiser languages operation.
Example: fr
Request body
Request body example
{
"translations": [
[]
]
}curl https://web.signcustomiser.com/api/v3/customisers/1/languages/fr/translations/validate-update \
--request POST \
--header 'Accept: application/json' \
--header 'Authorization: Bearer YOUR_API_TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"translations": [
[]
]
}'{
"data": {
"object": "customiser_language_translations_validation",
"operation": "update",
"customiser_id": 42,
"language_code": "fr",
"valid": true
},
"links": {
"self": "https://web.signcustomiser.com/api/v3/customisers/42/languages/fr/translations/validate-update",
"documentation": "https://www.signcustomiser.com/help/api/"
},
"meta": {
"api_version": "v3",
"request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
}{
"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"
}{
"type": "https://www.signcustomiser.com/help/api/problems/invalid_translation_key",
"title": "Invalid translation key",
"status": 422,
"code": "invalid_translation_key",
"detail": "The write names translation keys this language cannot accept. Read the translations to see the keys it carries, then retry with only those.",
"errors": [
{
"pointer": "/translations/0/key",
"code": "invalid_translation_key",
"detail": "This language has no translation key \"nope\"."
}
],
"invalid_keys": [
{
"key": "nope",
"reason": "unknown"
}
],
"request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}