Zugesagt (v1)
Diese neunzehn Adressen sind ein Versprechen: Solange v1 in der Adresse steht, verschwindet aus ihren Antworten nichts. Muss doch etwas brechen, entsteht /api/v2 daneben, und v1 läuft weiter. Jede Adresse zeigt aufgeklappt ihre Felder und ein Beispiel.
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.
Felder und Aufbau
Antwort
versionText Pflichtrepo_urlText Pflichtrelease_urlText PflichtlicenseTextupdate_checkedja/neinlatest_versionText oder nullupdate_availableja/neinchecked_atZeitpunkt (ISO 8601) oder nullAufbau der Antwort
{
"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/dashboard
promised
One tile for your home dashboard
Everything a dashboard tile needs, in a single call: how many findings are open, what is waiting, how full the library is and whether the instances are answering.
Findings come as identifiers, not sentences. dringendste holds up to three stable keys such as dienst.nicht_erreichbar. A ready-made sentence would be in the server's language, and it would change whenever somebody improves a wording - which under a promise it never could.
⚠️ This needs a token belonging to an administrator. Instance state and disk figures are an operator's business, and a token inherits the rights of its owner. Mark it read only and it is limited to GET - but an administrator's read-only token can still read the user list, the log and the settings. Worth knowing before you pin it to a screen somebody else can see.
Felder und Aufbau
Antwort
versionText PflichtbefundeKachelBefunde PflichtanfragenKachelAnfragen PflichtbibliothekKachelBibliothek PflichtinstanzenListe von KachelInstanz Pflichttickets_offenZahl PflichtbeschaffungTextAufbau der Antwort
{
"version": "string",
"befunde": {
"fehler": "number",
"warnung": "number",
"hinweis": "number",
"dringendste": [
"string"
]
},
"anfragen": {
"wartend": "number",
"laufend": "number",
"fehlgeschlagen_7d": "number"
},
"bibliothek": {
"filme": "number",
"serien": "number",
"belegt_bytes": "number",
"frei_bytes": "number",
"hausbestand_bytes": "number"
},
"instanzen": [
{
"name": "string",
"erreichbar": "boolean",
"probleme": "number"
}
],
"tickets_offen": "number",
"beschaffung": "string"
}
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.
Felder und Aufbau
Antwort
request_idZahl Pflichtmedia_typemovie | tv Pflichttmdb_idZahl PflichttitleText PflichtoverviewTextposter_urlText oder nullbackdrop_urlText oder nullrelease_dateText oder nullvote_averageZahlruntime_minutesZahl oder nullgenresListe von Textcompleted_atZeitpunkt (ISO 8601) oder nullrequested_byText Pflichtrequester_avatarText oder nullseasonsListe von ZahlAufbau der Antwort
[
{
"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/me
promised
Who am I and what may I do
The first call an integration should make. What Nexview hands out depends on the key: an account without administrative rights sees no instances and decides nothing, and a key marked read only changes nothing at all.
darf folds both together and lists what this request is allowed to do, as stable identifiers:
- lesen - read whatever the account can see
- anfragen - create requests
- entscheiden - approve, reject or defer other people's requests
- verwalten - read operator data: instances, users, the dashboard tile
- einrichten - change settings and notification targets
Build against these, not against role. A read-only administrator token has role: admin and still cannot approve anything.
schluessel is null when the call came from a signed-in browser session instead of a personal access key.
Felder und Aufbau
Antwort
versionText PflichtkontoMeinKonto PflichtschluesselMeinSchluessel oder null PflichtdarfListe von Text PflichtAufbau der Antwort
{
"version": "string",
"konto": {
"id": "number",
"username": "string",
"name": "string",
"role": "string",
"betreiber": "boolean"
},
"schluessel": {
"name": "string",
"nur_lesen": "boolean"
},
"darf": [
"string"
]
}
DELETE
/api/v1/me/push
promised
Stop calling back
Removes the callback address of this key. Nexview keeps sending the same information, but only when the integration asks for it.
GET
/api/v1/me/push
promised
Is Nexview able to notify this integration
Whether a callback address is registered for this key, and whether it has been confirmed. An unconfirmed target receives nothing.
Felder und Aufbau
Antwort
eingerichtetja/nein Pflichtbestaetigtja/neinurlText oder nullnameText oder nulllanguageText oder nullletzter_fehlerText oder nullAufbau der Antwort
{
"eingerichtet": "boolean",
"bestaetigt": "boolean",
"url": "string | null",
"name": "string | null",
"language": "string | null",
"letzter_fehler": "string | null"
}
POST
/api/v1/me/push
promised
Confirm the callback address
Hands back the four-digit code from the test message. Only after this does Nexview send anything to the address.
Felder und Aufbau
Anfragekörper
codeText PflichtAntwort
okja/nein PflichtmessageText PflichtAufbau der Antwort
{
"ok": "boolean",
"message": "string"
}
PUT
/api/v1/me/push
promised
Register where Nexview should call back
Registers a webhook address for this key and immediately sends a test message to it. That message carries a four-digit code in its own field; hand it back with POST /api/v1/me/push to switch the target on.
One target per key. Calling this again replaces the previous address instead of adding a second one, so an integration can be set up twice without leaving a dead address behind.
A key marked read only may use this address. It is the one exception to that rule: what it registers concerns nobody but its own owner, and the alternative would be to make people use a more powerful key.
Felder und Aufbau
Anfragekörper
urlText PflichtnameTextlanguageTextAntwort
okja/nein PflichtmessageText PflichtAufbau der Antwort
{
"ok": "boolean",
"message": "string"
}
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.
Felder und Aufbau
Parameter
media_typemovie | tv path Pflichttmdb_idZahl path PflichtAntwort
media_typemovie | tv Pflichttmdb_idZahl Pflichttvdb_idZahl oder nulltitleText Pflichtoriginal_titleText oder nulloverviewTextposter_urlText oder nullbackdrop_urlText oder nullrelease_dateText oder nullvote_averageZahlvote_countZahlgenresListe von Textgenre_idsListe von Zahlruntime_minutesZahl oder nullcertificationText oder nulloriginal_languageText oder nullorigin_countryListe von TextseasonsListe von SeasonInfostatusTextstatus_uhdText oder nullfassungenListe von FassungAchsewatchedja/neinwatched_onListe von Textwatched_not_onListe von TextpathText oder nullpath_uhdText oder nulluhd_in_standardja/neinAufbau der Antwort
{
"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"
],
"genre_ids": [
"number"
],
"runtime_minutes": "number | 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.
Felder und Aufbau
Anfragekörper
media_typemovie | tv PflichtfassungText oder nulltierstandard | uhdtmdb_idZahl Pflichtquality_profile_idZahl oder nullroot_folder_pathText oder nullmonitor_futureja/neintvdb_idZahl oder nullseasonZahl oder nullepisodesListe von Zahl oder nullfrom_watchlistja/neinAntwort
idZahl Pflichtmedia_typemovie | tv PflichtfassungText oder null Pflichttierstandard | uhd Pflichttmdb_idZahl PflichttitleText Pflichtposter_pathText oder null Pflichtrelease_dateText oder null Pflichtstatuspending_approval | approved | searching | downloaded | rejected | failed | cancelled | deleted | deferred Pflichtquality_profile_idZahl oder null Pflichtquality_profile_uhdja/neinroot_folder_pathText oder null PflichtseasonZahl oder null PflichtepisodesListe von Zahl oder nullfrom_watchlistja/nein Pflichtarr_linkedja/neinrequested_atZeitpunkt (ISO 8601) Pflichtapproved_atZeitpunkt (ISO 8601) oder null Pflichtcompleted_atZeitpunkt (ISO 8601) oder null Pflichtapproved_by_nameText oder nulllast_checked_atZeitpunkt (ISO 8601) oder nulllaedt_fortschrittZahl oder nulllaedt_seitZeitpunkt (ISO 8601) oder nullrejection_reasonText oder null Pflichtregel_nameText oder nulldarf_trotzdem_fragenja/neintrotzdem_gefragtja/neinerror_messageText oder null Pflichterror_detailObjekt oder nullratingZahl oder null PflichtfeedbackText oder null Pflichtrated_atZeitpunkt (ISO 8601) oder null Pflichtrating_outdatedja/neinfeedback_replyText oder null Pflichtreplied_atZeitpunkt (ISO 8601) oder null PflichtAufbau der Antwort
{
"id": "number",
"media_type": "movie | tv",
"fassung": "string | null",
"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",
"quality_profile_uhd": "boolean",
"root_folder_path": "string | null",
"season": "number | null",
"episodes": [
"number"
]
}
GET
/api/v1/requests/mine
promised
Your own requests
Every request made by the calling account, newest first, with its current state.
Felder und Aufbau
Antwort
idZahl Pflichtmedia_typemovie | tv PflichtfassungText oder null Pflichttierstandard | uhd Pflichttmdb_idZahl PflichttitleText Pflichtposter_pathText oder null Pflichtrelease_dateText oder null Pflichtstatuspending_approval | approved | searching | downloaded | rejected | failed | cancelled | deleted | deferred Pflichtquality_profile_idZahl oder null Pflichtquality_profile_uhdja/neinroot_folder_pathText oder null PflichtseasonZahl oder null PflichtepisodesListe von Zahl oder nullfrom_watchlistja/nein Pflichtarr_linkedja/neinrequested_atZeitpunkt (ISO 8601) Pflichtapproved_atZeitpunkt (ISO 8601) oder null Pflichtcompleted_atZeitpunkt (ISO 8601) oder null Pflichtapproved_by_nameText oder nulllast_checked_atZeitpunkt (ISO 8601) oder nulllaedt_fortschrittZahl oder nulllaedt_seitZeitpunkt (ISO 8601) oder nullrejection_reasonText oder null Pflichtregel_nameText oder nulldarf_trotzdem_fragenja/neintrotzdem_gefragtja/neinerror_messageText oder null Pflichterror_detailObjekt oder nullratingZahl oder null PflichtfeedbackText oder null Pflichtrated_atZeitpunkt (ISO 8601) oder null Pflichtrating_outdatedja/neinfeedback_replyText oder null Pflichtreplied_atZeitpunkt (ISO 8601) oder null PflichtAufbau der Antwort
[
{
"id": "number",
"media_type": "movie | tv",
"fassung": "string | null",
"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",
"quality_profile_uhd": "boolean",
"root_folder_path": "string | null",
"season": "number | null",
"episodes": [
"number"
]
}
]
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.
Felder und Aufbau
Antwort
movieQuotaInfo PflichttvQuotaInfo Pflichtauto_approveja/nein PflichtAufbau der Antwort
{
"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.
Felder und Aufbau
Parameter
request_idZahl path PflichtAntwort
idZahl Pflichtmedia_typemovie | tv PflichtfassungText oder null Pflichttierstandard | uhd Pflichttmdb_idZahl PflichttitleText Pflichtposter_pathText oder null Pflichtrelease_dateText oder null Pflichtstatuspending_approval | approved | searching | downloaded | rejected | failed | cancelled | deleted | deferred Pflichtquality_profile_idZahl oder null Pflichtquality_profile_uhdja/neinroot_folder_pathText oder null PflichtseasonZahl oder null PflichtepisodesListe von Zahl oder nullfrom_watchlistja/nein Pflichtarr_linkedja/neinrequested_atZeitpunkt (ISO 8601) Pflichtapproved_atZeitpunkt (ISO 8601) oder null Pflichtcompleted_atZeitpunkt (ISO 8601) oder null Pflichtapproved_by_nameText oder nulllast_checked_atZeitpunkt (ISO 8601) oder nulllaedt_fortschrittZahl oder nulllaedt_seitZeitpunkt (ISO 8601) oder nullrejection_reasonText oder null Pflichtregel_nameText oder nulldarf_trotzdem_fragenja/neintrotzdem_gefragtja/neinerror_messageText oder null Pflichterror_detailObjekt oder nullratingZahl oder null PflichtfeedbackText oder null Pflichtrated_atZeitpunkt (ISO 8601) oder null Pflichtrating_outdatedja/neinfeedback_replyText oder null Pflichtreplied_atZeitpunkt (ISO 8601) oder null PflichtAufbau der Antwort
{
"id": "number",
"media_type": "movie | tv",
"fassung": "string | null",
"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",
"quality_profile_uhd": "boolean",
"root_folder_path": "string | null",
"season": "number | null",
"episodes": [
"number"
]
}
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.
Felder und Aufbau
Parameter
media_typemovie | tv path PflichtqText query PflichtpageZahl queryAntwort
pageZahl Pflichttotal_pagesZahl Pflichttotal_resultsZahl PflichtitemsListe von MediaItem Pflichtdemoja/neinarr_warningText oder nullAufbau der Antwort
{
"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"
],
"genre_ids": [
"number"
],
"runtime_minutes": "number | 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.
Felder und Aufbau
Parameter
qText querypageZahl querygesehenja/nein queryAntwort
used_bytesZahl PflichtitemsZahl Pflichtlimit_bytesZahl oder nullpending_bytesZahl Pflichtzurechenbarja/neinwatched_availableja/neinmatchesZahlper_pageZahlentriesListe von StoragePosten PflichtAufbau der Antwort
{
"used_bytes": "number",
"items": "number",
"limit_bytes": "number | null",
"pending_bytes": "number",
"zurechenbar": "boolean",
"watched_available": "boolean",
"matches": "number",
"per_page": "number",
"entries": [
{
"id": "number",
"media_type": "string",
"fassung": "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"
}
]
}
GET
/api/v1/tickets/open-count
promised
Number of open tickets
How many tickets are still open. A plain number, meant for a dashboard.