# Цена и время озвучки

Точная цена глав до озвучки и когда будет готово.

`POST /books/{book_id}/quote` · озвучка

Считает ровно то, что спишется: только новые куски звука, каждый по весу своего голоса; уже озвученное и уже
прослушанное бесплатно. Ничего не ставит в очередь и не тратит.

## Параметры пути

| Параметр | Что это |
|---|---|
| `book_id` | Id книги |

## Тело запроса

JSON, заголовок `content-type: application/json`.

| Поле | Тип | Обязательно | Что это |
|---|---|---|---|
| `chapter_ids` | массив строк | нет | Какие главы; пусто — все главы книги (готовое не стоит ничего) |

## Что в ответе

| Поле | Что это |
|---|---|
| `credits` | Сколько знаков спишется |
| `chars` | Знаков текста в выбранных главах |
| `new_chars` | Из них новых (не озвученных) |
| `by` | Расчёт по весам голосов: `[{weight, chars, credits}]` |
| `heard` | Уже оплачено прослушиванием строк |
| `left` / `short` | Баланс / сколько не хватает |
| `render_s` | Сколько займёт сама озвучка, секунд |
| `wait_s` / `ready_s` | Ожидание в очереди / готово примерно через, секунд |
| `others` | Сколько людей сейчас тоже озвучивают |

```bash
curl -X POST "https://golosar-kniga.tech/api/v1/books/$BOOK_ID/quote" \
  -H "x-api-key: $KEY" \
  -H "content-type: application/json" \
  -d '{"chapter_ids": ["01a134d0-ddb7-72aa-b96c-967b596362fe", "01a134d0-ddc1-70fb-8b40-c2fe892e3bd1"]}'
```

```python
import os, requests

API = "https://golosar-kniga.tech/api/v1"
H = {"x-api-key": os.environ["GOLOSAR_KEY"]}
book_id = "01a134d0-dd73-77be-aa8d-0944ffb2b5e3"

r = requests.post(f"{API}/books/{book_id}/quote", headers=H, json={"chapter_ids": ["01a134d0-ddb7-72aa-b96c-967b596362fe", "01a134d0-ddc1-70fb-8b40-c2fe892e3bd1"]})
r.raise_for_status()
print(r.json())
```

```javascript
const API = "https://golosar-kniga.tech/api/v1";
const H = { "x-api-key": process.env.GOLOSAR_KEY, "content-type": "application/json" };
const bookId = "01a134d0-dd73-77be-aa8d-0944ffb2b5e3";

const r = await fetch(`${API}/books/${bookId}/quote`, { method: "POST", headers: H, body: JSON.stringify({"chapter_ids": ["01a134d0-ddb7-72aa-b96c-967b596362fe", "01a134d0-ddc1-70fb-8b40-c2fe892e3bd1"]}) });
if (!r.ok) throw new Error(await r.text());
console.log(await r.json());
```

```json Ответ 200
{
  "chapters": 2,
  "chars": 164,
  "credits": 164.0,
  "new_units": 4,
  "cached_units": 0,
  "render_s": 19.4,
  "not_ready": 2,
  "new_chars": 164,
  "heard": 0.0,
  "by": [
    {
      "weight": 1.0,
      "chars": 164,
      "credits": 164.0
    }
  ],
  "others": 0,
  "wait_s": 0.0,
  "ready_s": 19.4,
  "unlimited": false,
  "left": 1834512.5,
  "short": 0.0
}
```
