Skip to content
Area

Storage

19 addresses. Not promised — they belong to the internals and can change with any release. If you need something to stay put, use the promised thirteen.

19 addresses

POST /api/storage/abgleich may change

Measure storage now

Run the storage measurement immediately instead of waiting for the hourly pass. Built for one moment in particular: the first start after an update. The cleanup suggestion needs the file date from Radarr/Sonarr, and until the first pass has run there is nothing to suggest from.

Fields and shape

Response

FieldType
neunumber required
aktualisiertnumber required
entferntnumber required
mit_datumnumber required
posten_gesamtnumber required

Response shape

{
  "neu": "number",
  "aktualisiert": "number",
  "entfernt": "number",
  "mit_datum": "number",
  "posten_gesamt": "number"
}

POST /api/storage/entries/{posten_id}/abgeben may change

Offer an item up

"I do not need this any more" - puts one of your own items up for a decision. Nothing happens to the file, and the item still counts against your quota until somebody decides. Anything else would let people free their quota by offering everything up and never following through.

Fields and shape

Parameters

posten_idnumber path required

Request body

FieldType
wishstring or null

Response

FieldType
idnumber required
media_typestring required
tierstring required
tmdb_idnumber or null required
tvdb_idnumber or null required
seasonnumber or null required
titlestring required
size_bytesnumber required
statestring required
measured_attimestamp (ISO 8601) required
pathstring
released_attimestamp (ISO 8601) or null
release_wishstring or null
watchedboolean or null
managedboolean

Response shape

{
  "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"
}

POST /api/storage/entries/{posten_id}/behalten may change

Withdraw an offer

Take back an offer - "actually, no". Stops an accidental click from standing until the next decision. Nothing changes on the quota: the item counted the whole time.

Fields and shape

Parameters

posten_idnumber path required

Response

FieldType
idnumber required
media_typestring required
tierstring required
tmdb_idnumber or null required
tvdb_idnumber or null required
seasonnumber or null required
titlestring required
size_bytesnumber required
statestring required
measured_attimestamp (ISO 8601) required
pathstring
released_attimestamp (ISO 8601) or null
release_wishstring or null
watchedboolean or null
managedboolean

Response shape

{
  "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/storage/entries/{posten_id}/dateien may change

Which files would go

The dry run: exactly which files a deletion would remove. Nothing is touched. An administrator confirms later with this list in front of them rather than with a number - a mistake when deleting season by season is expensive, and a count does not show which season it would hit.

Fields and shape

Parameters

posten_idnumber path required

Response

FieldType
fileslist of StorageDatei required
total_bytesnumber required
deletableboolean required
reasonstring

Response shape

{
  "files": [
    {
      "path": "string",
      "size_bytes": "number"
    }
  ],
  "total_bytes": "number",
  "deletable": "boolean",
  "reason": "string"
}

POST /api/storage/entries/{posten_id}/entfolgen may change

Keep it, stop following

Carries out the third possible outcome of an offer: the files stay, the monitoring stops. It is the only outcome where the item stays charged to its owner - the files are still there, and somebody wanted them kept.

Fields and shape

Parameters

posten_idnumber path required

Response

FieldType
idnumber required
media_typestring required
tierstring required
tmdb_idnumber or null required
tvdb_idnumber or null required
seasonnumber or null required
titlestring required
size_bytesnumber required
statestring required
measured_attimestamp (ISO 8601) required
pathstring
released_attimestamp (ISO 8601) or null
release_wishstring or null
watchedboolean or null
managedboolean

Response shape

{
  "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"
}

POST /api/storage/entries/{posten_id}/haus may change

Move an item to the house

Attribute an item to the house instead of a person, freeing that person's quota. No file is touched. The title stays exactly where it is; only who it is charged to changes. That is the point: an administrator can relieve someone without anybody losing anything.

Fields and shape

Parameters

posten_idnumber path required

Response

FieldType
idnumber required
media_typestring required
tierstring required
tmdb_idnumber or null required
tvdb_idnumber or null required
seasonnumber or null required
titlestring required
size_bytesnumber required
statestring required
measured_attimestamp (ISO 8601) required
pathstring
released_attimestamp (ISO 8601) or null
release_wishstring or null
watchedboolean or null
managedboolean

Response shape

{
  "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"
}

POST /api/storage/entries/{posten_id}/loeschen may change

Delete a title and its files

Removes the title including the file. ⚠️ The one operation in Nexview with no way back, apart from whatever recycle bin Radarr or Sonarr provide. If none is configured, the file is gone immediately and for good - so the caller is expected to have shown the file list first.

Fields and shape

Parameters

posten_idnumber path required

POST /api/storage/entries/{posten_id}/vormerken may change

Mark for deletion, with a grace period

Sets a deletion date in the future instead of deleting now. Nothing happens to the file: the item stays where it is, keeps counting, and can be rescued until the last minute. Anyone who watches it in the meantime cancels the deletion without ever learning one was pending.

Fields and shape

Parameters

posten_idnumber path required

Request body

FieldType
tagenumber

Response

FieldType
posten_idnumber required
media_typestring required
tmdb_idnumber or null required
seasonnumber or null required
titlestring required
size_bytesnumber required
loescht_amtimestamp (ISO 8601) required
tage_uebrignumber required
poster_urlstring or null

Response shape

{
  "posten_id": "number",
  "media_type": "string",
  "tmdb_id": "number | null",
  "season": "number | null",
  "title": "string",
  "size_bytes": "number",
  "loescht_am": "ISO 8601",
  "tage_uebrig": "number",
  "poster_url": "string | null"
}

POST /api/storage/entries/{posten_id}/vormerkung-aufheben may change

Cancel a pending deletion

Takes the deletion mark off again. Everyone who was told about the deletion is told about this too - an announcement only the person who made it can see is not an announcement.

Fields and shape

Parameters

posten_idnumber path required

GET /api/storage/house may change

What the house holds

Everything attributed to the house, largest first, paged and searchable. Administrators only, for a concrete reason: the rows carry the path on the server, and an ordinary account has no business knowing the layout of the machine.

Fields and shape

Parameters

qstring query
pagenumber query

Response

FieldType
used_bytesnumber required
itemsnumber required
matchesnumber required
free_bytesnumber
free_volumesnumber
per_pagenumber
entrieslist of StoragePosten required

Response shape

{
  "used_bytes": "number",
  "items": "number",
  "matches": "number",
  "free_bytes": "number",
  "free_volumes": "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/storage/me may change

Your own storage

What is attributed to the calling account, largest first, with the individual items. The order is the point of the list: anyone asked to free up space needs to see where the space actually is. Without paths - where a file sits on the server is none of a requester's business.

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/storage/me/aufraeumen may change

Your own unwatched titles

What is attributed to this account and has not been watched for a long time. The same service as the statistics view, but narrowed - and without the house collection, because you can only give up what is yours.

Fields and shape

Parameters

monatenumber query
grenzenumber query
suchestring query
artmovie | tv or null query
nur_vorgemerktboolean query

Response

FieldType
postenlist of AufraeumPosten required
gesamt_anzahlnumber required
gesamt_bytesnumber required
monatenumber required
grundlageAufraeumGrundlage required
ohne_datumnumber required
gesehen_ohne_datumnumber

Response shape

{
  "posten": [
    {
      "posten_id": "number",
      "media_type": "string",
      "tmdb_id": "number | null",
      "tvdb_id": "number | null",
      "season": "number | null",
      "tier": "string",
      "title": "string",
      "size_bytes": "number",
      "state": "string",
      "besitzer": "string | null",
      "zuletzt_gesehen": "ISO 8601 | null",
      "gesehen_von": [
        "string"
      ],
      "bewertung": "number | null",
      "bewertungen": "number"
    }
  ],
  "gesamt_anzahl": "number",
  "gesamt_bytes": "number",
  "monate": "number",
  "grundlage": {
    "konten_gesamt": "number",
    "konten_verknuepft": "number",
    "ohne_verknuepfung": [
      "string"
    ],
    "vollstaendig": "boolean"
  },
  "ohne_datum": "number",
  "gesehen_ohne_datum": "number"
}

GET /api/storage/overview may change

Who uses how much

Storage use per account. Deliberately administrators only: how much space somebody takes up is a statement about a person. Approvers do not see it, for the same reason they do not see the ticket centre.

Fields and shape

Response

FieldType
total_bytesnumber required
house_bytesnumber required
house_itemsnumber required
shareslist of StorageAnteil required

Response shape

{
  "total_bytes": "number",
  "house_bytes": "number",
  "house_items": "number",
  "shares": [
    {
      "user_id": "number | null",
      "username": "string | null",
      "display_name": "string | null",
      "used_bytes": "number",
      "items": "number",
      "limit_bytes": "number | null"
    }
  ]
}

GET /api/storage/recyclebin may change

What sits in the recycle bins

What Radarr and Sonarr are holding in their recycle bins - and therefore still occupying disk. A recycle bin is not free space. What sits there has not left the disk; it is only waiting for its retention period to run out.

Fields and shape

Response

FieldType
total_bytesnumber required
incompleteboolean required
instanceslist of object required

Response shape

{
  "total_bytes": "number",
  "incomplete": "boolean",
  "instances": [
    "object"
  ]
}

GET /api/storage/releases may change

Items awaiting a decision

Offers waiting to be decided, oldest first. Administrators only, and that is a safety rule: approvers have a quota of their own and standing auto-approval. Letting them decide offers would let them shift their own storage onto the house.

Fields and shape

Response

FieldType
entryStoragePosten required
user_idnumber or null required
usernamestring or null required
display_namestring or null required
released_attimestamp (ISO 8601) or null required

Response shape

[
  {
    "entry": {
      "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"
    },
    "user_id": "number | null",
    "username": "string | null",
    "display_name": "string | null",
    "released_at": "ISO 8601 | null"
  }
]

GET /api/storage/umbuchung may change

Preview: move everything to the house

The numbers behind "move all holdings to the house". The dialogue in front of it has to be able to say "X titles totalling Y GB will become house holdings" - a general warning gets clicked away, a number gets read.

Fields and shape

Response

FieldType
countnumber required
bytesnumber required

Response shape

{
  "count": "number",
  "bytes": "number"
}

POST /api/storage/umbuchung may change

Move everything to the house

Attributes every item to the house, so every account starts at zero. Until 0.19 this happened as a side effect of switching the accounting mode. The mode is gone; the operation remains, as the deliberate way to reset a household that has grown lopsided.

Fields and shape

Response

FieldType
countnumber required
bytesnumber required

Response shape

{
  "count": "number",
  "bytes": "number"
}

GET /api/storage/user/{user_id} may change

Storage of one account

What this one account occupies, largest first. Administrators only, for the same reason as the overview: how much space somebody takes up is a statement about a person.

Fields and shape

Parameters

user_idnumber path required
qstring query
pagenumber query

Response

FieldType
user_idnumber required
usernamestring required
display_namestring or null required
used_bytesnumber required
itemsnumber required
limit_bytesnumber or null
pending_bytesnumber required
matchesnumber required
per_pagenumber
entrieslist of StoragePosten required

Response shape

{
  "user_id": "number",
  "username": "string",
  "display_name": "string | null",
  "used_bytes": "number",
  "items": "number",
  "limit_bytes": "number | null",
  "pending_bytes": "number",
  "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/storage/vorgemerkt may change

What is about to disappear

Everything marked for deletion, visible to everyone. Deliberately not restricted to administrators: the whole purpose of a grace period is that the household notices it. An announcement only its author reads is not an announcement.

Fields and shape

Response

FieldType
posten_idnumber required
media_typestring required
tmdb_idnumber or null required
seasonnumber or null required
titlestring required
size_bytesnumber required
loescht_amtimestamp (ISO 8601) required
tage_uebrignumber required
poster_urlstring or null

Response shape

[
  {
    "posten_id": "number",
    "media_type": "string",
    "tmdb_id": "number | null",
    "season": "number | null",
    "title": "string",
    "size_bytes": "number",
    "loescht_am": "ISO 8601",
    "tage_uebrig": "number",
    "poster_url": "string | null"
  }
]

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.