/api/v1/translator/booksbooks:readКниги, к которым у владельца токена есть редакционный доступ.
Автоматическая загрузка книг, томов, глав и изображений. API отвечает JSON в UTF-8, использует Bearer-токены и проверяет права владельца на каждом запросе.
Передавайте ключ только в заголовке Authorization: Bearer rhb_…. Обычный токен переводчика ограничен выбранными scope и назначенными книгами. content:manage является административным super-scope: он открывает Content Manager и все методы Translator API для всех книг без назначения команды; редактору этот scope недоступен.
curl --fail-with-body \
-H "Authorization: Bearer $RANOBEHUB_TOKEN" \
-H "Accept: application/json" \
https://ranobehub.org/api/v1/translator/booksСоздать, показать, скопировать, перевыпустить или отозвать ключ можно в разделе API панели управления.
Существующие методы сохранены; новые возможности добавляются без переименования старых URL и полей.
/api/v1/translator/booksbooks:readКниги, к которым у владельца токена есть редакционный доступ.
/api/v1/translator/books/:idbooks:readОсновные метаданные выбранной книги.
/api/v1/translator/books/:idbooks:writeСовместимый существующий метод частичного обновления.
/api/v1/translator/books/:id/volumesvolumes:readСписок томов с номером, названием и статусом.
/api/v1/translator/books/:id/volumesvolumes:writeСоздаёт том; повтор номера возвращает 409.
/api/v1/translator/books/:id/volumes/:volumeIdvolumes:writeПри смене номера moveChapters=true переносит главы вместе с томом.
/api/v1/translator/books/:id/volumes/:volumeIdvolumes:deleteУдаляется только пустой том; иначе возвращается 409.
/api/v1/translator/books/:id/chapterschapters:readГлавы по порядку со счётчиками и назначенными конкретной главе переводчиками.
/api/v1/translator/books/:id/chapterschapters:createСанитайзит HTML, вычисляет метаданные и опционально принимает translatorIds.
/api/v1/translator/chapters/:idchapters:readПолный HTML, метаданные, translatorIds и сведения о переводчиках главы.
/api/v1/translator/chapters/:idchapters:updateМожно менять содержимое и опционально заменять translatorIds; предыдущая версия сохраняется.
/api/v1/translator/chapters/:idchapters:deleteУдаляет главу и связанные редакционные черновики, ревизии и комментарии.
/api/v1/translator/books/:id/imageschapters:imagesmultipart/form-data, поле image; JPEG, PNG, WebP или GIF до 12 МБ.
/api/v1/translator/books/:id/images?mediaId=:mediaIdchapters:imagesУдаляет только изображение главы, принадлежащее указанной книге.
/api/v1/translator/chapters/:id/schedulechapters:readВозвращает будущую редакцию главы или null.
/api/v1/translator/chapters/:id/schedulechapters:scheduleСоздаёт или заменяет будущую редакцию на срок до 366 дней.
/api/v1/translator/chapters/:id/schedulechapters:scheduleУдаляет запланированную редакцию, не меняя текущую главу.
/api/v1/translator/books/:id/translation-brancheschapters:read / chapters:updateПолучение и создание независимых веток перевода.
/api/v1/translator/books/:id/ai-chapterschapters:createЗапускает поддерживаемый сервером процесс AI-перевода главы.
POST /api/v1/translator/books/125/chapters
{
"volume": 1,
"number": 12,
"title": "Глава 12",
"html": "<p>Текст…</p><img src="/api/media/9001" alt="Карта">",
"draft": false,
"sourceId": "import:12",
"translatorIds": [12, 18]
}HTML очищается на сервере. Количество Unicode-символов и hasImages пересчитываются при создании, обновлении, восстановлении и отложенной публикации.
translatorIds необязателен. В PATCH отсутствие поля сохраняет прежнее авторство, массив заменяет его, а [] очищает явное авторство главы. Все ID должны заранее быть назначены книге через её taxonomy. Ответы GET содержат translatorIds и translators.
curl --fail-with-body \
-H "Authorization: Bearer $RANOBEHUB_TOKEN" \
-F "image=@map.webp" \
https://ranobehub.org/api/v1/translator/books/125/imagesОтвет содержит mediaId и относительный url. Этот URL вставляется в <img src>. Внешние HTTPS-изображения тоже допустимы, но управлять их жизненным циклом RanobeHub не может.
Этот раздел требует токен администратора со scope content:manage. Обычному переводчику он недоступен.
/api/v1/content/resources?type=tags|authors|translators|countries|statusescontent:manageПоиск и получение ID для связей новой книги.
/api/v1/content/resourcescontent:manageСоздание тега, автора, команды переводчиков или страны.
/api/v1/content/resources/:type/:idcontent:manageЧастичное обновление справочника.
/api/v1/content/resources/:type/:idcontent:manageСвязанный с книгами ресурс защищён ответом 409.
/api/v1/content/bookscontent:manageПоиск по названию/slug и создание книги с начальными связями.
/api/v1/content/books/:idcontent:manageАдминистративное представление книги.
/api/v1/content/books/:idcontent:manageМетаданные, состояние публикации, блокировка и тип произведения.
/api/v1/content/books/:idcontent:manageБезопасное мягкое удаление без уничтожения глав и истории.
/api/v1/content/books/:id/taxonomycontent:manageПолная замена тегов, авторов, переводчиков и стран; назначенные команды получают редакционные права.
/api/v1/content/books/:id/posterscontent:manageПолучение галереи, загрузка multipart-постера и удаление по posterId.
curl --fail-with-body \
-H "Authorization: Bearer $RANOBEHUB_TOKEN" \
-F "poster=@cover.webp" \
https://ranobehub.org/api/v1/content/books/125/posters
curl --fail-with-body -X DELETE \
-H "Authorization: Bearer $RANOBEHUB_TOKEN" \
"https://ranobehub.org/api/v1/content/books/125/posters?posterId=9002"Поддерживаются JPEG, PNG и WebP до 12 МБ, не более 15 постеров на книгу. GET и ответы мутаций возвращают массив posters, активный posterUrl, количество и лимит.
PUT taxonomy и загрузить постеры.POST /api/v1/content/books
{
"title": "Название книги",
"descriptionHtml": "<p>Аннотация</p>",
"year": 2026,
"statusId": 1,
"state": "opened",
"tagIds": [4, 18],
"authorIds": [93],
"translatorIds": [12],
"countryIds": [3]
}400 — неверные поля, 401 — токен отсутствует или истёк, 403 — недостаточно scope/прав, 404 — объект не найден, 409 — конфликт номера или используемый ресурс, 413/415 — размер или формат изображения. Для автоматического импорта сохраняйте возвращённые ID и sourceId; не повторяйте POST после сетевой ошибки вслепую.