Sign Customiser

Navigation

Dark mode

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.

GET/api/v3/customisers/{customiser_id}/languages/{language_code}/translations
GETList language translations
GET/api/v3/customisers/{customiser_id}/languages/{language_code}/translations

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. 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

The Authorization header expects a Bearer token. Generate one on the API keys page in your dashboard.

Path

The customiser id, from the list customisers operation.

The language tag, from the list customiser languages operation.

Query parameters

The page size, 1 to 100. Defaults to 20.

The opaque next_cursor from a previous page.

Only rows in one catalogue group.

Only the row with this exact catalogue key.

Only required (true) or only optional (false) rows.

Only retired (true) or only live (false) rows.

List language translations

Click Send to see the live response.

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

customiser_idstringpathrequired

The customiser id, from the list customisers operation.

Example: 1

language_codestringpathrequired

The language tag, from the list customiser languages operation.

Example: fr

Query parameters

limitstringquery

The page size, 1 to 100. Defaults to 20.

Example: 20

cursorstringquery

The opaque next_cursor from a previous page.

Example: eyJ2IjoxfQ

filter%5Bgroup%5Dstringquery

Only rows in one catalogue group.

Example: selections

filter%5Bkey%5Dstringquery

Only the row with this exact catalogue key.

Example: selection:12:title

filter%5Brequired%5Dstringquery

Only required (true) or only optional (false) rows.

Example: true

filter%5Bretired%5Dstringquery

Only retired (true) or only live (false) rows.

Example: false

List language translations
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'
Response
{
  "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 a question and press Enter. Use the arrow keys to move between the results.