Skip to content
The promise

Promised (v1)

These thirteen addresses are a promise: as long as v1 is in the address, nothing disappears from their answers. If something has to break, /api/v2 appears beside it and v1 keeps running. Expand any address for its fields.

13 addresses

GET /api/v1/about promised

Version and build

Which version of Nexview this is. Useful for telling deployments apart and for deciding whether a feature you rely on exists yet.

Fields and shape

Response

FieldType
versionstring required
repo_urlstring required
release_urlstring required
licensestring
update_checkedboolean
latest_versionstring or null
update_availableboolean
checked_attimestamp (ISO 8601) or null

Response shape

{
  "version": "string",
  "repo_url": "string",
  "release_url": "string",
  "license": "string",
  "update_checked": "boolean",
  "latest_version": "string | null",
  "update_available": "boolean",
  "checked_at": "ISO 8601 | null"
}

GET /api/v1/admin/requests/pending/count promised

Number of requests awaiting a decision

How many requests are waiting for approval. Restricted to accounts that may decide - a token inherits that from its owner, so an ordinary account gets 403 here.

GET /api/v1/health promised

Is Nexview running

Answers without a token. A monitor that has to sign in before it may ask "are you still alive" is not a monitor. Returns {"status": "ok"} and nothing else - deliberately no version, no database state, nothing that would tell an unauthenticated caller about the installation.

GET /api/v1/home/recent promised

Recently arrived

Titles that finished downloading recently - the list a dashboard tile shows. Note that each entry also names who requested it. That is wanted inside a household and may not be wanted on a wall-mounted screen.

Fields and shape

Response

FieldType
request_idnumber required
media_typemovie | tv required
tmdb_idnumber required
titlestring required
overviewstring
poster_urlstring or null
backdrop_urlstring or null
release_datestring or null
vote_averagenumber
runtime_minutesnumber or null
genreslist of string
completed_attimestamp (ISO 8601) or null
requested_bystring required
requester_avatarstring or null
seasonslist of number

Response shape

[
  {
    "request_id": "number",
    "media_type": "movie | tv",
    "tmdb_id": "number",
    "title": "string",
    "overview": "string",
    "poster_url": "string | null",
    "backdrop_url": "string | null",
    "release_date": "string | null",
    "vote_average": "number",
    "runtime_minutes": "number | null",
    "genres": [
      "string"
    ],
    "completed_at": "ISO 8601 | null",
    "requested_by": "string",
    "requester_avatar": "string | null"
  }
]

GET /api/v1/media/{media_type}/{tmdb_id} promised

Details for one title

Everything about a single title: overview, cast, ratings, runtime, and whether it is already in the library.

Fields and shape

Parameters

media_typemovie | tv path required
tmdb_idnumber path required

Response

FieldType
media_typemovie | tv required
tmdb_idnumber required
tvdb_idnumber or null
titlestring required
original_titlestring or null
overviewstring
poster_urlstring or null
backdrop_urlstring or null
release_datestring or null
vote_averagenumber
vote_countnumber
genreslist of string
runtime_minutesnumber or null
certificationstring or null
original_languagestring or null
origin_countrylist of string
seasonslist of SeasonInfo
statusstring
status_uhdstring or null
watchedboolean
watched_onlist of string
watched_not_onlist of string
pathstring or null
path_uhdstring or null
uhd_in_standardboolean

Response shape

{
  "media_type": "movie | tv",
  "tmdb_id": "number",
  "tvdb_id": "number | null",
  "title": "string",
  "original_title": "string | null",
  "overview": "string",
  "poster_url": "string | null",
  "backdrop_url": "string | null",
  "release_date": "string | null",
  "vote_average": "number",
  "vote_count": "number",
  "genres": [
    "string"
  ],
  "runtime_minutes": "number | null",
  "certification": "string | null"
}

GET /api/v1/notifications/unread/count promised

Number of unread notifications

Unread notifications for the calling account.

POST /api/v1/requests promised

Request a title

Ask for a title to be added. The request goes through exactly the same checks as one made in the browser: quota, blocklist and approval all apply to the account the token belongs to. A request that needs approval comes back as pending, not as an error.

Fields and shape

Request body

FieldType
media_typemovie | tv required
tierstandard | uhd
tmdb_idnumber required
quality_profile_idnumber or null
root_folder_pathstring or null
monitor_futureboolean
seasonnumber or null
from_watchlistboolean

Response

FieldType
idnumber required
media_typemovie | tv required
tierstandard | uhd required
tmdb_idnumber required
titlestring required
poster_pathstring or null required
release_datestring or null required
statuspending_approval | approved | searching | downloaded | rejected | failed | cancelled | deleted | deferred required
quality_profile_idnumber or null required
root_folder_pathstring or null required
seasonnumber or null required
from_watchlistboolean required
requested_attimestamp (ISO 8601) required
approved_attimestamp (ISO 8601) or null required
completed_attimestamp (ISO 8601) or null required
approved_by_namestring or null
last_checked_attimestamp (ISO 8601) or null
rejection_reasonstring or null required
error_messagestring or null required
ratingnumber or null required
feedbackstring or null required
rated_attimestamp (ISO 8601) or null required
rating_outdatedboolean
feedback_replystring or null required
replied_attimestamp (ISO 8601) or null required

Response shape

{
  "id": "number",
  "media_type": "movie | tv",
  "tier": "standard | uhd",
  "tmdb_id": "number",
  "title": "string",
  "poster_path": "string | null",
  "release_date": "string | null",
  "status": "pending_approval | approved | searching | downloaded | rejected | failed | cancelled | deleted | deferred",
  "quality_profile_id": "number | null",
  "root_folder_path": "string | null",
  "season": "number | null",
  "from_watchlist": "boolean",
  "requested_at": "ISO 8601",
  "approved_at": "ISO 8601 | null"
}

GET /api/v1/requests/mine promised

Your own requests

Every request made by the calling account, newest first, with its current state.

Fields and shape

Response

FieldType
idnumber required
media_typemovie | tv required
tierstandard | uhd required
tmdb_idnumber required
titlestring required
poster_pathstring or null required
release_datestring or null required
statuspending_approval | approved | searching | downloaded | rejected | failed | cancelled | deleted | deferred required
quality_profile_idnumber or null required
root_folder_pathstring or null required
seasonnumber or null required
from_watchlistboolean required
requested_attimestamp (ISO 8601) required
approved_attimestamp (ISO 8601) or null required
completed_attimestamp (ISO 8601) or null required
approved_by_namestring or null
last_checked_attimestamp (ISO 8601) or null
rejection_reasonstring or null required
error_messagestring or null required
ratingnumber or null required
feedbackstring or null required
rated_attimestamp (ISO 8601) or null required
rating_outdatedboolean
feedback_replystring or null required
replied_attimestamp (ISO 8601) or null required

Response shape

[
  {
    "id": "number",
    "media_type": "movie | tv",
    "tier": "standard | uhd",
    "tmdb_id": "number",
    "title": "string",
    "poster_path": "string | null",
    "release_date": "string | null",
    "status": "pending_approval | approved | searching | downloaded | rejected | failed | cancelled | deleted | deferred",
    "quality_profile_id": "number | null",
    "root_folder_path": "string | null",
    "season": "number | null",
    "from_watchlist": "boolean",
    "requested_at": "ISO 8601",
    "approved_at": "ISO 8601 | null"
  }
]

GET /api/v1/requests/quota promised

How much you may still request

What the calling account has used in the current period and what is left. An account without a limit reports no ceiling rather than a very large one.

Fields and shape

Response

FieldType
movieQuotaInfo required
tvQuotaInfo required
auto_approveboolean required

Response shape

{
  "movie": {
    "limit": "number | null",
    "used": "number",
    "remaining": "number | null",
    "unlimited": "boolean",
    "exhausted": "boolean",
    "period": "day | week | month",
    "resets_at": "ISO 8601 | null"
  },
  "tv": {
    "limit": "number | null",
    "used": "number",
    "remaining": "number | null",
    "unlimited": "boolean",
    "exhausted": "boolean",
    "period": "day | week | month",
    "resets_at": "ISO 8601 | null"
  },
  "auto_approve": "boolean"
}

POST /api/v1/requests/{request_id}/cancel promised

Cancel your own request

Withdraw a request you made yourself. Only works while it is still open - once something has been downloaded there is nothing left to cancel.

Fields and shape

Parameters

request_idnumber path required

Response

FieldType
idnumber required
media_typemovie | tv required
tierstandard | uhd required
tmdb_idnumber required
titlestring required
poster_pathstring or null required
release_datestring or null required
statuspending_approval | approved | searching | downloaded | rejected | failed | cancelled | deleted | deferred required
quality_profile_idnumber or null required
root_folder_pathstring or null required
seasonnumber or null required
from_watchlistboolean required
requested_attimestamp (ISO 8601) required
approved_attimestamp (ISO 8601) or null required
completed_attimestamp (ISO 8601) or null required
approved_by_namestring or null
last_checked_attimestamp (ISO 8601) or null
rejection_reasonstring or null required
error_messagestring or null required
ratingnumber or null required
feedbackstring or null required
rated_attimestamp (ISO 8601) or null required
rating_outdatedboolean
feedback_replystring or null required
replied_attimestamp (ISO 8601) or null required

Response shape

{
  "id": "number",
  "media_type": "movie | tv",
  "tier": "standard | uhd",
  "tmdb_id": "number",
  "title": "string",
  "poster_path": "string | null",
  "release_date": "string | null",
  "status": "pending_approval | approved | searching | downloaded | rejected | failed | cancelled | deleted | deferred",
  "quality_profile_id": "number | null",
  "root_folder_path": "string | null",
  "season": "number | null",
  "from_watchlist": "boolean",
  "requested_at": "ISO 8601",
  "approved_at": "ISO 8601 | null"
}

GET /api/v1/search/{media_type} promised

Search movies or shows

Find titles by name. media_type is movie or tv. Results are paged and come from TMDB in the language of the calling account.

Fields and shape

Parameters

media_typemovie | tv path required
qstring query required
pagenumber query

Response

FieldType
pagenumber required
total_pagesnumber required
total_resultsnumber required
itemslist of MediaItem required
demoboolean
arr_warningstring or null

Response shape

{
  "page": "number",
  "total_pages": "number",
  "total_results": "number",
  "items": [
    {
      "media_type": "movie | tv",
      "tmdb_id": "number",
      "tvdb_id": "number | null",
      "title": "string",
      "original_title": "string | null",
      "overview": "string",
      "poster_url": "string | null",
      "backdrop_url": "string | null",
      "release_date": "string | null",
      "vote_average": "number",
      "vote_count": "number",
      "genres": [
        "string"
      ],
      "runtime_minutes": "number | null",
      "certification": "string | null"
    }
  ],
  "demo": "boolean",
  "arr_warning": "string | null"
}

GET /api/v1/storage/me promised

Your own storage use

How much space the titles attributed to the calling account take up, and against which allowance.

Fields and shape

Parameters

qstring query
pagenumber query
gesehenboolean query

Response

FieldType
used_bytesnumber required
itemsnumber required
limit_bytesnumber or null
pending_bytesnumber required
watched_availableboolean
matchesnumber
per_pagenumber
entrieslist of StoragePosten required

Response shape

{
  "used_bytes": "number",
  "items": "number",
  "limit_bytes": "number | null",
  "pending_bytes": "number",
  "watched_available": "boolean",
  "matches": "number",
  "per_page": "number",
  "entries": [
    {
      "id": "number",
      "media_type": "string",
      "tier": "string",
      "tmdb_id": "number | null",
      "tvdb_id": "number | null",
      "season": "number | null",
      "title": "string",
      "size_bytes": "number",
      "state": "string",
      "measured_at": "ISO 8601",
      "path": "string",
      "released_at": "ISO 8601 | null",
      "release_wish": "string | null",
      "watched": "boolean | null"
    }
  ]
}

GET /api/v1/tickets/open-count promised

Number of open tickets

How many tickets are still open. A plain number, meant for a dashboard.

Nexview uses TMDB as its data source but is not from TMDB and is not endorsed or certified by TMDB. The screenshots come from a test installation; the accounts and requests shown in them are made up.

Nexview is published under the AGPL-3.0 licence. Radarr, Sonarr, Plex, Docker, Synology, IMDb, Rotten Tomatoes, Metacritic and JustWatch are trademarks of their respective owners and are named here for descriptive purposes only. Some of the icons on this page are based on Lucide (ISC licence) — copyright held in part by Cole Bemis 2013–2022 as part of Feather (MIT licence), otherwise by the Lucide contributors from 2022.