Перейти к основному содержимому

GraphQL API

NeoWatch API предоставляет полноценный GraphQL endpoint наряду с REST. GraphQL позволяет запрашивать только нужные поля и объединять несколько запросов в один.

Endpoint​

POST https://api.neome.uk/graphql

Интерактивный GraphQL Playground доступен по тому же URL (GET-запрос открывает UI).

Аутентификация​

GraphQL использует тот же JWT-токен, что и REST. Передавайте его в заголовке:

Authorization: Bearer <access_token>

Запросы без токена работают для публичных данных (медиа, поиск, жанры). Мутации и персональные данные (избранное, прогресс) требуют авторизации.

Основные типы​

MediaType​

enum MediaType { movie tv }

MediaDetail (union)​

Запрос media возвращает MovieDetail | TVDetail. Используйте inline fragments для специфичных полей:

... on MovieDetail { runtime budget }
... on TVDetail { numberOfSeasons seasons { name } }

Язык​

Все запросы принимают аргумент language: String. Поддерживаемые значения:

КодЯзык
ru-RUРусский (по умолчанию)
en-USEnglish
uk-UAУкраинский
ro-RORomână
be-BYБеларуская

Пагинация​

Список-запросы возвращают:

type PaginatedMedia {
items: [MediaItem!]!
page: Int!
totalPages: Int!
totalResults: Int!
}

Публичные запросы​

ЗапросОписание
healthСтатус API
media(type, id, language)Детальная страница фильма/сериала
mediaCredits(type, id, language)Актёры и съёмочная группа
recommendations(type, id, page, language)Рекомендации TMDB
similar(type, id, page, language)Похожие
relatedByCast(type, id, page, language)Связанные по актёрам
relatedByStudio(type, id, page, language)Связанные по студии
mediaCollection(id, language)Коллекция фильмов (напр. MCU)
season(tvId, season, language)Детали сезона
episode(tvId, season, episode, language)Детали эпизода
movieList(list, page, language)Список фильмов (popular/top_rated/upcoming)
tvList(list, page, language)Список сериалов (popular/top_rated)
trending(type, page, language)Трендовые
search(q, type, genre, year, ...)Поиск
genres(language)Все жанры
person(id, language)Персона
personCredits(id, page, language)Фильмография
categories(language)Категории для browse
categoryCollection(slug, page, language)Контент категории
player(provider, kpId, tmdbId, imdbId, ...)Плеер
cdnPlayer(cdnId, kpId, imdbId, ...)CDN-плеер
torrentSearch(q, imdbId)Поиск торрентов
supportersСписок поддержавших проект

Запросы (требуют токен)​

ЗапросОписание
favorites(page, language)Список избранного
watchLaterСписок «смотреть позже»
syncProgressПрогресс просмотра
loginUrl(redirectUri, codeChallenge, codeChallengeMethod, state)URL для OAuth авторизации

Мутации (требуют токен)​

МутацияОписание
refreshTokens(refreshToken)Обновить токены
updateProfile(name, avatar)Обновить профиль
logoutВыйти
deleteAccountУдалить аккаунт
addFavorite(mediaId, mediaType)Добавить в избранное
removeFavorite(mediaId, mediaType)Убрать из избранного
addToWatchLater(mediaId)Добавить в «смотреть позже»
removeFromWatchLater(mediaId)Убрать из «смотреть позже»
upsertProgress(mediaId, mediaType, season, episode, progress)Сохранить прогресс
deleteProgress(mediaId, mediaType, season, episode)Удалить прогресс
batchSyncProgress(items)Пакетная синхронизация

Преимущества перед REST​

  • Один запрос — вместо 3–4 REST-запросов один GraphQL
  • Только нужные поля — нет лишних данных
  • Introspection — клиенты могут автоматически узнать схему
  • Типобезопасность — codegen для TypeScript/Kotlin/Swift

Следующие шаги​