Customiser languages
List language translations
List the translation rows of one customiser language, in catalogue order — the order the merchant admin editor presents them in, which groups related copy together and stays stable across pages. Every row carries two phases.
Overview
The draft_* members are what a merchant or an
AI translation is working on; the published_* members are what the
storefront serves. Only publishing the language promotes one to the other.
source_text is the text that this row is translated from, as the
catalogue last stored it. When the customiser has an authoring language,
option, selection, setting, letter-part and form text carries the authoring
language's text. For an interface label, it is the published text of the
language's source_language_code when that language has published text for
the key. Otherwise, it is the published text of the default language, or
its built-in text when that is blank. A promoted default also follows its
source_language_code. A default with no source_language_code uses its
own text. With no authoring language, every row carries the catalogue text.
For option and form text, that is the customiser's own text. For interface
labels, it is the published text of the default language. For such a
customiser, the merchant admin can show the current wording of the source
language instead, drafts included.
draft_stale and published_stale are true when the value is filled but
its source changed after the value was written. The value still serves and
still publishes. It no longer matches the text it was translated from.
retired rows are keys whose copy no longer exists. They are kept for
history, excluded from publishing and from AI work, and refused on write —
use filter[retired]=false to leave them out entirely.
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 or the
language 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, an unknown filter, or an invalid cursor; a
429 problem means too many requests — wait retry_after seconds, then retry.
Authorisation
Bearer token required. Include it in the Authorization header.
Required scope: customisers:read
Path parameters
The customiser id, from the list customisers operation.
Example: 1
The language tag, from the list customiser languages operation.
Example: fr
Query parameters
The page size, 1 to 100. Defaults to 20.
Example: 20
The opaque next_cursor from a previous page.
Example: eyJ2IjoxfQ
Only rows in one catalogue group.
Example: selections
Only the row with this exact catalogue key.
Example: selection:12:title
Only required (true) or only optional (false) rows.
Example: true
Only retired (true) or only live (false) rows.
Example: false
curl https://web.signcustomiser.com/api/v3/customisers/1/languages/fr/translations?limit=20&cursor=eyJ2IjoxfQ&filter%5Bgroup%5D=selections&filter%5Bkey%5D=selection%3A12%3Atitle&filter%5Brequired%5D=true&filter%5Bretired%5D=false \
--header 'Accept: application/json' \
--header 'Authorization: Bearer YOUR_API_TOKEN'{
"data": [
{
"object": "customiser_language_translation",
"customiser_id": 42,
"language_code": "fr",
"key": "selection:12:title",
"group": "selections",
"required": true,
"retired": false,
"source_text": "Colour",
"draft_value": "Couleur",
"draft_status": "current",
"draft_origin": "merchant",
"draft_stale": false,
"published_value": null,
"published_status": "missing",
"published_origin": null,
"published_stale": false,
"published_at": null,
"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/fr/translations",
"documentation": "https://www.signcustomiser.com/help/api/",
"next": null
},
"meta": {
"api_version": "v3",
"request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
}{
"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"
}