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

- Source URL: https://www.signcustomiser.com/help/api/v3-get-list-customiser-languages/
- Markdown URL: https://www.signcustomiser.com/help/api/v3-get-list-customiser-languages.md
- Group: Customiser languages
- Method: GET
- Path: /api/v3/customisers/{customiser_id}/languages
- Auth: Bearer token
- Required scopes: `customisers:read`

## Path parameters

- customiser_id (string, required): The customiser id, from the list customisers operation. Example: 1

## Query parameters

- limit (string, optional): The page size, 1 to 100. Defaults to 20. Example: 20
- cursor (string, optional): The opaque next_cursor from a previous page. Example: eyJ2IjoxfQ

## cURL example

```bash
curl https://web.signcustomiser.com/api/v3/customisers/1/languages?limit=20&cursor=eyJ2IjoxfQ \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer YOUR_API_TOKEN'
```

## Response examples

### 200 Customiser languages

```json
{
  "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"
    }
  }
}
```

### 401 Missing API key

```json
{
  "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"
}
```

### 403 Insufficient scope

```json
{
  "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"
}
```

### 404 Unknown customiser

```json
{
  "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"
}
```

### 429 Rate limited

```json
{
  "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"
}
```
