---
title: "GET /orders/{order}/dub/quote — Dub quote"
url: https://lumean.app/tr/developers/docs/api/get-orders-order-dub-quote
locale: tr
description: "Dub quote"
generated: 2026-11-08
operationId: dubbing.quote
method: GET
path: "/orders/{order}/dub/quote"
scopes: [orders.read]
spec_version: 1.0.0
---

# GET /orders/{order}/dub/quote

**Dub quote**

The price of dubbing a finished order BEFORE creating it — nothing is charged and the
key's token pool is not spent. The parameters are the same as for
`POST /orders/{order}/dub`, all optional: the price depends only on the source characters.

- `source_chars` — source characters (the paid length of its latest chunk versions);
- `tokens` — tokens to be charged, of them `tokens_from_quota` — from the subscription
  quota, `tokens_from_payg` — beyond it (PAYG), `lmc_cost_minor` — the PAYG top-up in
  LMC minor units (the unit is `currency_asset`);
- `price_lumc_minor` — the full dub price in LMC minor units, even when the quota pays;
- `allowed` / `reason` — whether the order would go through right now (`reason` is the
  same code creation would return: `insufficient_balance`, `token_quota_exceeded` — the
  key's token quota is short, and so on);
- `defaults` — the voice and model the dub uses without an explicit `voice_id`/`model_id`
  (the template snapshot of the source order or the chosen `template_id`;
  `voice_id: null` means the default voice is no longer available — pass your own);
- `source_template` — the source order's template, `templates` — your templates of the
  same service to take a voice from (`template_id`).

The figures match the actual charge unless the quota or balance changes between the
quote and the order. Limit — 60 quotes per minute per key.

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

- Gerekli izin: `orders.read`

## İstek

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

## Parametreler

| Alan | Yer | Tür | Zor. | Açıklama |
| --- | --- | --- | --- | --- |
| `order` | path | `string` | zorunlu | Order UUID — 36 characters shaped like `9f8b2c1a-4d3e-4f5a-8b9c-0d1e2f3a4b5c`, not a number. Take it from the `id` field: `POST /orders` returns it on creation and `GET /orders` lists it. Someone else’s order will not open with your key — you get a `404`. |
| `target_language` | query | `string` — ≤ 16 karakter | — | The dub language from the options' `languages` (`GET /orders/dubbing/options`). Optional: the price does not depend on the language; when passed, the quote checks in advance that it is allowed and differs from the source language. |
| `voice_id` | query | `string` — ≤ 64 karakter | — | The dub voice. Optional: the price does not depend on the voice; without it `defaults.voice_id` holds the voice the dub will use. |
| `model_id` | query | `string` — ≤ 64 karakter | — | The dub model from the options' `models`. Optional. |
| `template_id` | query | `string` — ≤ 64 karakter | — | Your template of the same service as the source: `defaults` show its voice and model. Someone else's template or a template of another service gives `422`. |
| `name` | query | `string` — ≤ 120 karakter | — | Name of the future order; does not affect the price. |
| `X-Locale` | header | `string` | — | Language of the localised texts in the response (`message`, labels, failure reasons), an ISO-639-1 code. Optional; without it — the key owner’s account language, then `Accept-Language`, then the default language. An unknown or unsupported code is skipped as if it were absent. |
| `X-Timezone` | header | `string` | — | IANA time zone (`Europe/Moscow`) in which the response shows moments in time — ISO-8601 with an offset. Optional; without it dates come in UTC. An invalid zone is ignored. The server returns the applied zone in the response header of the same name. |

## İstek gövdesi

Gövde yok.

## Yanıtlar

### 200 — The quote.

**Yanıt alanları**

| Alan | Tür | Zor. | Açıklama |
| --- | --- | --- | --- |
| `success` | `boolean` | zorunlu | 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` | zorunlu | 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` | `object` | zorunlu | The response payload. |
| `data.source_order_id` | `string` | zorunlu | The source order. |
| `data.source_language` | `string` | zorunlu | The source language (`auto` — unknown; a match with the dub language is then caught by the worker and refunded). |
| `data.target_language` | `string` — nullable | zorunlu | The dub language from the request, or `null`. |
| `data.source_chars` | `integer` | zorunlu | Source characters — the paid length of its latest chunk versions. The price is based on them. |
| `data.tokens` | `integer` | zorunlu | Tokens to be charged for the dub. |
| `data.tokens_from_quota` | `integer` | zorunlu | How many tokens come from the subscription quota. |
| `data.tokens_from_payg` | `integer` | zorunlu | How many tokens beyond the quota the balance pays (PAYG). |
| `data.lmc_cost_minor` | `integer` | zorunlu | The PAYG top-up in LMC minor units (`real = value / 10^currency_asset.precision`). 0 — the quota covers it all. |
| `data.lmc_cost_formatted` | `number` | zorunlu | `lmc_cost_minor` in whole LMC. |
| `data.price_lumc_minor` | `integer` | zorunlu | The full dub price in LMC minor units — even when the quota pays. For showing the price in the user's currency. |
| `data.price_lumc_formatted` | `number` | zorunlu | `price_lumc_minor` in whole LMC. |
| `data.currency_asset` | `object` | zorunlu | The unit of the `*_minor` amounts — LMC. Use `precision` to convert minor units into whole LMC. |
| `data.currency_asset.code` | `string` — `LUMC` | zorunlu | Asset code of the amounts. |
| `data.currency_asset.precision` | `integer` | zorunlu | LMC decimals: `real = value / 10^precision`. |
| `data.defaults` | `object` | zorunlu | What the dub uses without explicit `voice_id`/`model_id`. |
| `data.defaults.template_id` | `string` | zorunlu | The template whose settings are used (the request `template_id`); `null` — the source order's template snapshot. |
| `data.defaults.voice_id` | `null` — nullable | zorunlu | The default dub voice. `null` — the voice is no longer available (removed from the catalog, clone deleted): pass `voice_id`. |
| `data.defaults.model_id` | `string` | zorunlu | The default dub model. |
| `data.source_template` | `object` — nullable | zorunlu | The source order's template (`null` — the order has no template). |
| `data.source_template.id` | `string` | zorunlu | Template id. |
| `data.source_template.name` | `string` | zorunlu | Template name. |
| `data.templates` | `array<object>` | zorunlu | Your templates of the same service as the source — candidates for `template_id`. Newest first, up to 100. |
| `data.templates[].id` | `string` | zorunlu | Template id — the value for `template_id`. |
| `data.templates[].name` | `string` | zorunlu | Template name. |
| `data.templates[].voice_id` | `string` — nullable | zorunlu | The template voice. |
| `data.templates[].model_id` | `string` — nullable | zorunlu | The template model. |
| `data.allowed` | `boolean` | zorunlu | `true` — an order with these parameters would go through right now (quota and balance suffice). |
| `data.reason` | `string` — `token_quota_exceeded` | zorunlu | Why it would not go through (`allowed: false`): the same code creation would return, e.g. `insufficient_balance` or `token_quota_exceeded` (the key's token quota is short). |

**Örnek**

```json
{
  "success": true,
  "message": "string",
  "data": {
    "source_order_id": "string",
    "source_language": "string",
    "target_language": "string",
    "source_chars": 1,
    "tokens": 1,
    "tokens_from_quota": 1,
    "tokens_from_payg": 1,
    "lmc_cost_minor": 1,
    "lmc_cost_formatted": 1,
    "price_lumc_minor": 1,
    "price_lumc_formatted": 1,
    "currency_asset": {
      "code": "string",
      "precision": 1
    },
    "defaults": {
      "template_id": "string",
      "voice_id": null,
      "model_id": "string"
    },
    "source_template": {
      "id": "string",
      "name": "string"
    },
    "templates": [
      {
        "id": "string",
        "name": "string",
        "voice_id": "string",
        "model_id": "string"
      }
    ],
    "allowed": true,
    "reason": "string"
  }
}
```

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

**Yanıt alanları**

| Alan | Tür | Zor. | Açıklama |
| --- | --- | --- | --- |
| `success` | `boolean` | zorunlu | Always `false` in error responses. |
| `message` | `string` | zorunlu | Error text in the key's language (set through the `X-Locale` header). |
| `data` | `null` — nullable | zorunlu | Always `null` when the request is rejected before processing. |

**Örnek**

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

**Yanıt alanları**

| Alan | Tür | Zor. | Açıklama |
| --- | --- | --- | --- |
| `success` | `boolean` | zorunlu | Always `false` in error responses. |
| `message` | `string` | zorunlu | Error text in the key's language (set through the `X-Locale` header). |

**Örnek**

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

### 404 — The order is not found or does not belong to the key owner.

**Yanıt alanları**

| Alan | Tür | Zor. | Açıklama |
| --- | --- | --- | --- |
| `message` | `string` | zorunlu | Error overview. |

**Örnek**

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

### 422 — The same source refusals as dub creation: `reason` `dub_source_unavailable`, `dub_source_too_long`, `dub_same_language`, `service_not_found`; field validation errors.

**Yanıt alanları**

| Alan | Tür | Zor. | Açıklama |
| --- | --- | --- | --- |
| `message` | `string` | zorunlu | A summary of the validation errors in words, in the response language (`X-Locale`). |
| `errors` | `object` | zorunlu | A per-field breakdown: the key names a request field, the value lists the complaints about it. |
| `errors.*` | `array<string>` — rastgele anahtarlar | — |  |

**Örnek**

```json
{
  "message": "string",
  "errors": {
    "key": [
      "string"
    ]
  }
}
```

### 429 — More than 60 quotes per minute per key.

**Yanıt alanları**

| Alan | Tür | Zor. | Açıklama |
| --- | --- | --- | --- |
| `success` | `boolean` | zorunlu | Always `false` in error responses. |
| `message` | `string` | zorunlu | Error text in the key's language (set through the `X-Locale` header). |
| `reason` | `string` | zorunlu | Machine-readable failure reason — branch on this, not on the message text. |
| `error_code` | `string` | zorunlu | The same machine-readable code as in `reason` — a second name for the field. The values always match; branch on either. |
| `retry_after` | `integer` — nullable | — | How many seconds to wait before retrying (the same value is in the `Retry-After` header). |

**Örnek**

```json
{
  "success": false,
  "message": "Too many attempts. Please wait a moment and try again.",
  "reason": "rate_limit_exceeded",
  "error_code": "rate_limit_exceeded",
  "retry_after": 30
}
```

### 503 — Dubbing of this kind is temporarily not accepted.

**Yanıt alanları**

| Alan | Tür | Zor. | Açıklama |
| --- | --- | --- | --- |
| `success` | `boolean` | zorunlu | Always `false` in error responses. |
| `message` | `string` | zorunlu | Error text in the key's language (set through the `X-Locale` header). |

**Örnek**

```json
{
  "success": false,
  "message": "Service temporarily unavailable."
}
```

---

- Bu sayfa tarayıcıda: https://lumean.app/tr/developers/docs/api/get-orders-order-dub-quote
- Makine tarafından okunabilir tam başvuru: https://api.lumean.app/docs/llm.md
