Customiser languages
List customiser languages
List the customiser's languages in the order they were added. Each language
carries its status, whether it is_default, a translation_summary of how
much of its copy is written, and its most recent ai_translation if it has
ever had one. publishable inside the summary is the copy gate: it is true
when no required key is still blank.
Overview
A running AI translation blocks the
publish separately, which ai_translation reports.
meta.language_sync is the customiser-level state of the advisory catalogue
sync every option write triggers. That sync adds translation rows for new
copy, retires rows for copy that is gone, and marks drifted values stale — it
runs after the triggering write has committed and cannot fail it, so it is
eventually consistent by design. status is not_run before the customiser
has ever been synchronised, and otherwise the outcome the last sync recorded:
synchronised, or failed when it did not converge.
languages_version changes whenever the published payload does, so an
integration can cache against it.
The operation is read-only, has no side effects, and is always safe to
retry. Requires the customisers:read scope.
A 404 problem with code resource_not_found means the customiser does not
exist on the store your API key belongs to. A 401 problem means the key is
missing, invalid, or expired; a 403 problem with code insufficient_scope
means the key lacks customisers:read; a 422 problem means an unknown query
parameter or an invalid cursor; a 429 problem means too many requests — wait
retry_after seconds, then retry. Error responses use RFC 9457 problem+json
with a machine-readable code and a request_id to quote when contacting
support.
Authorisation
Bearer token required. Include it in theAuthorization header.
Required scope: customisers:read
Path parameters
The customiser id, from the list customisers operation.
Example: 1
Query parameters
The page size, 1 to 100. Defaults to 20.
Example: 20
The opaque next_cursor from a previous page.
Example: eyJ2IjoxfQ
curl https://web.signcustomiser.com/api/v3/customisers/1/languages?limit=20&cursor=eyJ2IjoxfQ \
--header 'Accept: application/json' \
--header 'Authorization: Bearer YOUR_API_TOKEN'{
"data": [
{
"object": "customiser_language",
"customiser_id": 42,
"language_code": "en",
"source_language_code": "en",
"display_name": "English",
"status": "published",
"is_default": true,
"translation_summary": {
"key_count": 184,
"required_key_count": 96,
"translated_key_count": 184,
"retired_key_count": 0,
"missing_required_key_count": 0,
"publishable": true
},
"ai_translation": null,
"published_at": "2026-05-04T09:12:31Z",
"created_at": "2026-04-02T11:00:00Z",
"updated_at": "2026-05-04T09:12:31Z"
},
{
"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": {
"object": "language_ai_translation",
"status": "running",
"cancellable": true,
"chunks_total": 8,
"keys_targeted": 184,
"error_summary": null,
"started_at": "2026-05-04T09:10:00Z",
"finished_at": null,
"created_at": "2026-05-04T09:09:58Z",
"updated_at": "2026-05-04T09:11:20Z"
},
"published_at": null,
"created_at": "2026-05-04T09:09:00Z",
"updated_at": "2026-05-04T09:11:20Z"
}
],
"pagination": {
"has_more": false,
"next_cursor": null
},
"links": {
"self": "https://web.signcustomiser.com/api/v3/customisers/42/languages",
"documentation": "https://www.signcustomiser.com/help/api/",
"next": null
},
"meta": {
"api_version": "v3",
"request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t",
"language_sync": {
"languages_version": "9f2b1c0d4e5a6f708192a3b4c5d6e7f8091a2b3c4d5e6f708192a3b4c5d6e7f8",
"synced_at": "2026-05-04T09:12:31Z",
"status": "synchronised"
}
}
}{
"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: Authorization: Bearer <api key>. Keys are created in the merchant admin under Integrate → API Tokens.",
"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:read scope, but the API key grants the following scopes: store:read. Create a key that includes the required scope in the merchant admin under Integrate → API Tokens.",
"required_scopes": [
"customisers:read"
],
"granted_scopes": [
"store: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/rate_limited",
"title": "Too many requests",
"status": 429,
"code": "rate_limited",
"detail": "You have exceeded the request limit for this API key. Wait 60 seconds, then retry.",
"retry_after": 60,
"request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}