Книга, главы и герои
Всё о книге: главы с состоянием и герои с голосами.
GET /books/{book_id} · чтение
Главное для работы через API — chapters (что озвучивать) и characters (кому какой голос).
Параметры пути
| Параметр | Что это |
|---|---|
book_id |
Id книги |
Что в ответе
| Поле | Что это |
|---|---|
chapters[].status |
draft — не озвучена, queued / rendering — идёт, ready — готова, failed — ошибка |
chapters[].audio_url |
MP3 главы, если готова |
chapters[].chars |
Знаков текста главы |
chapters[].review |
Сколько реплик под вопросом «кто говорит» |
characters[] |
Герои: id, name, is_narrator, voice_id, emotion, gender, age |
characters[].share |
Доля текста книги, которую читает герой |
edition |
Текущая версия озвучки |
Ошибки
| Код | Когда |
|---|---|
404 |
Нет такой книги или она не ваша |
curl "https://golosar-kniga.tech/api/v1/books/$BOOK_ID" \
-H "x-api-key: $KEY"
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.get(f"{API}/books/{book_id}", headers=H)
r.raise_for_status()
print(r.json())
const API = "https://golosar-kniga.tech/api/v1";
const H = { "x-api-key": process.env.GOLOSAR_KEY };
const bookId = "01a134d0-dd73-77be-aa8d-0944ffb2b5e3";
const r = await fetch(`${API}/books/${bookId}`, { headers: H });
if (!r.ok) throw new Error(await r.text());
console.log(await r.json());
json Ответ 200
{
"book": {
"id": "01a134d0-dd73-77be-aa8d-0944ffb2b5e3",
"title": "Вечер в саду",
"author": "Иван Петров",
"status": "ready",
"created_at": "2026-10-13T10:31:05.833003+00:00",
"language": "ru",
"subtitle": "",
"series": null,
"series_no": "",
"genre": "",
"age_rating": "",
"thoughts": "hero",
"sound": "studio",
"check": "auto",
"reading": "roles",
"cover_url": null,
"active_edition_id": "01a134d0-ddcc-7b41-ba3d-b8112c6d0414",
"chapters": [
{
"id": "01a134d0-ddb7-72aa-b96c-967b596362fe",
"position": 0,
"title": "Глава 1",
"status": "draft",
"chars": 108,
"duration_s": null,
"rendered_at": null,
"audio_url": null,
"review": 0,
"runs": [
[
"01a134d0-dda0-7b5d-800a-17ac9f33d738",
43,
false
],
[
"01a134d0-ddae-7737-9ff4-0672f189eef8",
10,
false
]
]
},
{
"id": "01a134d0-ddc1-70fb-8b40-c2fe892e3bd1",
"position": 1,
"title": "Глава 2",
"status": "draft",
"chars": 56,
"duration_s": null,
"rendered_at": null,
"audio_url": null,
"review": 0,
"runs": [
[
"01a134d0-dda0-7b5d-800a-17ac9f33d738",
56,
false
]
]
}
],
"chapters_ready": 0,
"duration_s": 0,
"characters": [
{
"id": "01a134d0-dda0-7b5d-800a-17ac9f33d738",
"name": "Рассказчик",
"aliases": [],
"is_narrator": true,
"voice_id": "01a134c9-6200-71bf-90af-073da699a09e",
"emotion": "Нейтрально",
"controls": {
"speed": 1.0
},
"position": 0,
"gender": "",
"age": "",
"description": "",
"preset_id": null,
"source": "rules",
"share": 0.792
},
{
"id": "01a134d0-ddae-7737-9ff4-0672f189eef8",
"name": "Мира",
"aliases": [
"Мира"
],
"is_narrator": false,
"voice_id": "01a134c9-6200-71bf-90af-073da699a09e",
"emotion": "Нейтрально",
"controls": {
"pitch": 0,
"speed": 1.0,
"formant": 1.0
},
"position": 1,
"gender": "f",
"age": "",
"description": "",
"preset_id": "01a134c9-6244-7ce9-b73b-4f11b4038f7c",
"source": "rules",
"share": 0.08
}
],
"review_total": 0,
"analysis": null,
"edition": {
"id": "01a134d0-ddcc-7b41-ba3d-b8112c6d0414",
"name": "Версия 1",
"status": "draft",
"count": 1
}
}
}