Customiser languages
Delete a customiser language
Remove a language and every translation row it holds, and return a receipt: the language exactly as it was immediately before deletion. The copy is gone from the storefront as soon as the customiser cached configuration clears.
Overview
Two states refuse the delete. A 422 problem with code
language_not_deletable means it is the customiser default language, or the
only published one: a customiser must always keep one published default,
because it is the copy the storefront falls back to — publish another
language and make it the default first. A 409 problem with code
ai_translation_in_progress means an AI translation is still writing this
language draft copy; wait for it, or cancel it, then retry. A 409 problem
with code resource_in_use means other records still point at the language,
and names them in referenced_by.
The delete clears the customiser cached storefront configuration and runs the
advisory language sync. It never regenerates your Shopify products, product
images, or product cache. An Idempotency-Key header is required:
repeating the same key replays the original receipt without deleting
anything else. Requires the customisers:write scope.
A 400 problem means the Idempotency-Key header is missing or malformed.
401, 403, 404, and 429 problems behave as on the read operation, with
customisers:write as the required scope.
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
curl https://web.signcustomiser.com/api/v3/customisers/1/languages/fr \
--request DELETE \
--header 'Accept: application/json' \
--header 'Authorization: Bearer YOUR_API_TOKEN'{
"data": {
"object": "customiser_language_deletion_receipt",
"language_code": "fr",
"customiser_id": 42,
"deleted": true,
"resource": {
"object": "customiser_language",
"customiser_id": 42,
"language_code": "fr",
"source_language_code": "en",
"display_name": "French",
"status": "draft",
"is_default": false,
"translation_summary": {
"key_count": 184,
"required_key_count": 96,
"translated_key_count": 12,
"retired_key_count": 0,
"missing_required_key_count": 84,
"publishable": false
},
"ai_translation": null,
"published_at": null,
"created_at": "2026-05-04T09:09:00Z",
"updated_at": "2026-05-04T09:11:20Z"
}
},
"links": {
"self": "https://web.signcustomiser.com/api/v3/customisers/42/languages/fr",
"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/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"
}{
"type": "https://www.signcustomiser.com/help/api/problems/ai_translation_in_progress",
"title": "AI translation in progress",
"status": 409,
"code": "ai_translation_in_progress",
"detail": "An AI translation is still writing this language's draft copy, so it cannot be removed yet. Wait for the translation to finish, or cancel it, then retry.",
"ai_translation_statuses": [
"queued",
"running"
],
"request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}{
"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"
}