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 copy being translated, in the language named by
source_language_code on the language itself. draft_stale and
published_stale are true when the value is filled but the source has
changed since it was written: the value still serves and still publishes, it
simply no longer matches what 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 theAuthorization 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:label
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%3Alabel&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:label",
"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"
}