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.
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
neunumber requiredaktualisiertnumber requiredentferntnumber requiredmit_datumnumber requiredposten_gesamtnumber requiredResponse 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 requiredRequest body
wishstring or nullResponse
idnumber requiredmedia_typestring requiredtierstring requiredtmdb_idnumber or null requiredtvdb_idnumber or null requiredseasonnumber or null requiredtitlestring requiredsize_bytesnumber requiredstatestring requiredmeasured_attimestamp (ISO 8601) requiredpathstringreleased_attimestamp (ISO 8601) or nullrelease_wishstring or nullwatchedboolean or nullmanagedbooleanResponse 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 requiredResponse
idnumber requiredmedia_typestring requiredtierstring requiredtmdb_idnumber or null requiredtvdb_idnumber or null requiredseasonnumber or null requiredtitlestring requiredsize_bytesnumber requiredstatestring requiredmeasured_attimestamp (ISO 8601) requiredpathstringreleased_attimestamp (ISO 8601) or nullrelease_wishstring or nullwatchedboolean or nullmanagedbooleanResponse 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 requiredResponse
fileslist of StorageDatei requiredtotal_bytesnumber requireddeletableboolean requiredreasonstringResponse 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 requiredResponse
idnumber requiredmedia_typestring requiredtierstring requiredtmdb_idnumber or null requiredtvdb_idnumber or null requiredseasonnumber or null requiredtitlestring requiredsize_bytesnumber requiredstatestring requiredmeasured_attimestamp (ISO 8601) requiredpathstringreleased_attimestamp (ISO 8601) or nullrelease_wishstring or nullwatchedboolean or nullmanagedbooleanResponse 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 requiredResponse
idnumber requiredmedia_typestring requiredtierstring requiredtmdb_idnumber or null requiredtvdb_idnumber or null requiredseasonnumber or null requiredtitlestring requiredsize_bytesnumber requiredstatestring requiredmeasured_attimestamp (ISO 8601) requiredpathstringreleased_attimestamp (ISO 8601) or nullrelease_wishstring or nullwatchedboolean or nullmanagedbooleanResponse 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 requiredRequest body
tagenumberResponse
posten_idnumber requiredmedia_typestring requiredtmdb_idnumber or null requiredseasonnumber or null requiredtitlestring requiredsize_bytesnumber requiredloescht_amtimestamp (ISO 8601) requiredtage_uebrignumber requiredposter_urlstring or nullResponse 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 querypagenumber queryResponse
used_bytesnumber requireditemsnumber requiredmatchesnumber requiredfree_bytesnumberfree_volumesnumberper_pagenumberentrieslist of StoragePosten requiredResponse 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 querypagenumber querygesehenboolean queryResponse
used_bytesnumber requireditemsnumber requiredlimit_bytesnumber or nullpending_bytesnumber requiredwatched_availablebooleanmatchesnumberper_pagenumberentrieslist of StoragePosten requiredResponse 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 querygrenzenumber querysuchestring queryartmovie | tv or null querynur_vorgemerktboolean queryResponse
postenlist of AufraeumPosten requiredgesamt_anzahlnumber requiredgesamt_bytesnumber requiredmonatenumber requiredgrundlageAufraeumGrundlage requiredohne_datumnumber requiredgesehen_ohne_datumnumberResponse 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
total_bytesnumber requiredhouse_bytesnumber requiredhouse_itemsnumber requiredshareslist of StorageAnteil requiredResponse 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
total_bytesnumber requiredincompleteboolean requiredinstanceslist of object requiredResponse 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
entryStoragePosten requireduser_idnumber or null requiredusernamestring or null requireddisplay_namestring or null requiredreleased_attimestamp (ISO 8601) or null requiredResponse 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
countnumber requiredbytesnumber requiredResponse 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
countnumber requiredbytesnumber requiredResponse 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 requiredqstring querypagenumber queryResponse
user_idnumber requiredusernamestring requireddisplay_namestring or null requiredused_bytesnumber requireditemsnumber requiredlimit_bytesnumber or nullpending_bytesnumber requiredmatchesnumber requiredper_pagenumberentrieslist of StoragePosten requiredResponse 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
posten_idnumber requiredmedia_typestring requiredtmdb_idnumber or null requiredseasonnumber or null requiredtitlestring requiredsize_bytesnumber requiredloescht_amtimestamp (ISO 8601) requiredtage_uebrignumber requiredposter_urlstring or nullResponse 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"
}
]