---
title: "GET /templates/{template} — Get Template"
url: https://lumean.app/en/developers/docs/api/get-templates-template
locale: en
description: "Get Template"
generated: 2026-10-17
operationId: template.show
method: GET
path: "/templates/{template}"
scopes: [templates.read]
spec_version: 0.0.1
---

# GET /templates/{template}

**Get Template**

Returns one template in full, including its `config` and the service it is bound to.

Someone else's template is not reachable even by direct link — `403`.

**Required key permission:** `templates.read`.

- Required scope: `templates.read`

## Request

```bash
curl -X GET 'https://api.lumean.app/api/public/templates/{template}' \
  -H 'Accept: application/json' \
  -H 'X-API-KEY: YOUR_API_KEY'
```

## Parameters

| Field | In | Type | Req. | Description |
| --- | --- | --- | --- | --- |
| `template` | path | `string` — uuid | required | Template UUID — 36 characters, not a number. Take it from the `id` field: `POST /templates` returns it on creation, and `GET /templates` and `GET /templates/browse` list it. default: `4d3e9f8b-2c1a-4f5a-8b9c-0d1e2f3a4b5c` |

## Request body

No body.

## Responses

### 200 — Success. The payload is in `data`.

**Response fields**

| Field | Type | Req. | Description |
| --- | --- | --- | --- |
| `success` | `boolean` | required | Success flag. Branch on the HTTP status code instead: any 2xx response carries `true` here, while an error comes back in a different shape that need not contain this field at all. |
| `message` | `string` | required | A human-readable note in the account language. Fine to show to a user; do not parse it — the wording changes without notice and is not an error code. |
| `data` | `Template` | required | The full template, including its current `config`. |
| `data.id` | `string` | required | Template UUID. Put it into `template_id` when creating an order. |
| `data.user_id` | `integer` | required | ID of the template owner. |
| `data.slug` | `string` | required | Short public identifier used for sharing. `null` on a template that was never shared. |
| `data.name` | `string` | required | Template name — for humans only; it does not affect generation. |
| `data.service_key` | `string` | required | Code of the service whose schema validates `config`: `elevenlabs`, `lumimg`, and so on. |
| `data.service` | `Service \| null` — nullable | required | The template’s service for reference: name and pricing, without configuration schemas. `null` means no service with that code exists any more. |
| `data.config` | `object` | required | Generation settings: voice, model, speed and so on — the set of keys is defined by the service. Look up allowed values in `GET /templates/config-options?service=<code>`; anything outside the schema is rejected with `422`. Inside an order (`template` in `GET /orders/{order}`) this is the order’s own settings — the snapshot taken at creation with `config_override` applied, not the template’s current configuration (for orders created before late September 2026 — the current template configuration with `config_override`). |
| `data.is_public` | `boolean` | required | Whether the template is published in the shared catalogue. |
| `data.folder_id` | `string` | required | UUID of the folder holding the template, or `null` for the root. The folder tree is visible in `GET /templates/browse`. |
| `data.created_at` | `string` — date-time — nullable | required | When the template was created, ISO 8601. |
| `data.updated_at` | `string` — date-time — nullable | required | When the template last changed, ISO 8601. |

**Example**

```json
{
  "success": true,
  "message": "Template retrieved",
  "data": {
    "id": "7e2a4c1d-8b3f-4a5e-9c6d-1f2e3a4b5c6d",
    "user_id": 501,
    "slug": null,
    "name": "Narrator Voice (EN)",
    "service_key": "elevenlabs",
    "service": {
      "id": 3,
      "code": "elevenlabs",
      "name": "ElevenLabs",
      "display_name": "ElevenLabs TTS",
      "payg_access": "everyone",
      "billing_mode": "pay_as_you_go",
      "unit_asset_id": 5,
      "unit_asset": {
        "id": 5,
        "code": "tts_units",
        "kind": "unit",
        "precision": 0,
        "name": "TTS Units",
        "deleted_at": null,
        "created_at": "2026-01-10T09:00:00+00:00",
        "updated_at": "2026-01-10T09:00:00+00:00"
      },
      "required_entitlement_id": null,
      "units_per_call": null,
      "units_per_char": 1,
      "units_per_image": null,
      "units_per_second": null,
      "min_billable_chars": 1,
      "lumcoin_per_token": 10,
      "lumc_precision": 2,
      "price_lumc_minor": null,
      "unit_size": 1,
      "uses_money_first_pricing": false,
      "rate_unit": "char",
      "display_category": "voice",
      "is_premium": false,
      "display_order": 1,
      "metadata": null,
      "is_active": true,
      "created_at": "2026-01-10T09:00:00+00:00",
      "updated_at": "2026-01-10T09:00:00+00:00"
    },
    "config": {
      "tts_settings": {
        "model_id": "eleven_multilingual_v2",
        "voice_id": "21m00Tcm4TlvDq8ikWAM",
        "mode": "mode_v1",
        "language_code": null,
        "advanced_voice_settings": true,
        "voice_settings": {
          "stability": 0.5,
          "similarity_boost": 0.75,
          "use_speaker_boost": true
        }
      }
    },
    "is_public": false,
    "folder_id": null,
    "created_at": "2026-06-01T10:00:00+00:00",
    "updated_at": "2026-06-01T10:00:00+00:00"
  }
}
```

### 401 — The key is missing, unknown, disabled or expired.

**Response fields**

| Field | Type | Req. | Description |
| --- | --- | --- | --- |
| `success` | `boolean` | required | Always `false` in error responses. |
| `message` | `string` | required | Error text in the key's language (set through the `X-Locale` header). |
| `data` | `null` — nullable | required | Always `null` when the request is rejected before processing. |

**Example**

```json
{
  "success": false,
  "message": "API key is missing. Provide it in the X-API-KEY header.",
  "data": null
}
```

### 403 — The key lacks the required permission, or the object belongs to another user.

**Response fields**

| Field | Type | Req. | Description |
| --- | --- | --- | --- |
| `message` | `string` | required | Error overview. |

**Example**

```json
{
  "success": false,
  "message": "This API key does not have permission to perform this action."
}
```

### 404 — Not found, or not reachable with this key.

**Response fields**

| Field | Type | Req. | Description |
| --- | --- | --- | --- |
| `success` | `boolean` | required | Always `false` in error responses. |
| `message` | `string` | required | Error text in the key's language (set through the `X-Locale` header). |
| `reason` | `string` | — | Machine-readable reason — present on business refusals (for example, `invalid_order_status`); other errors omit it. Branch on it, not on the message text. |
| `error_code` | `string` | — | The same machine-readable code as in `reason` — a second name for the field. Arrives together with `reason`; the values always match. |

**Example**

```json
{
  "success": false,
  "message": "Resource not found."
}
```

---

- This page in the browser: https://lumean.app/en/developers/docs/api/get-templates-template
- Full machine-readable reference: https://api.lumean.app/docs/llm.md
