Storage
What is stored, by whom, and what could be reclaimed — including the duplicate copies and the merge that removes them.
List duplicate media
Groups of byte-identical files, with the copy proposed as the one to keep.
query Parameters
added_byfile_typelimitoffsetrulesortHeaders
X-Tenant-IdThe workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.
List duplicate media › Responses
Success
Merge duplicates
Re-points everything referencing a removed copy — albums, social posts, presentation files, versions and child files — onto the copy being kept, merges their metadata into it, and then deletes the rest. Nothing is left pointing at a file that has gone.
Removed copies stay recoverable for the trash retention period. Needs permission both to deduplicate and to delete files.
Requires both admin:media:deduplicate and media:delete.
Headers
X-Tenant-IdThe workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.
Merge duplicates › Responses
Success
Get a storage breakdown
Grouped by module, file type or user — file count and total size per group.
query Parameters
group_bycursor^[A-Za-z0-9_-]+$file_added_byfile_createdlimitmoduleoffsetoriginsort^-?[a-z0-9_]+$typeHeaders
X-Tenant-IdThe workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.
Get a storage breakdown › Responses
Success
List the largest files
Returns the files consuming the most storage, largest first — the list to work down when reclaiming space.
query Parameters
cursor^[A-Za-z0-9_-]+$file_added_byfile_createdlimitmoduleoffsetoriginsort^-?[a-z0-9_]+$typeHeaders
X-Tenant-IdThe workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.
List the largest files › Responses
Success
Get a stored file
What is claiming this file across the platform, and what else is attached to it — byte-identical copies and saved versions. This is what tells you whether deleting it would actually free space.
Unlike the rest of the API, this is not filtered by who may see the file: it is an accounting view, and a total that hid rows would be the wrong number.
path Parameters
idHeaders
X-Tenant-IdThe workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.
Get a stored file › Responses
Success
Get reclaimable space
Duplicate copies beyond the first, and what is sitting in the trash. trashRetentionDays is how long a deleted file stays recoverable — 0 means deletion is immediate.
Headers
X-Tenant-IdThe workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.
Get reclaimable space › Responses
Success
Get storage usage
Bytes stored against bytes granted. used counts live files and their version history — the same figure the quota is enforced on, so it is the one to compare against entitlement. An entitlement of 0 means the plan grants no storage.
Headers
X-Tenant-IdThe workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.
Get storage usage › Responses
Success
Get the storage trend
Stored bytes over time, for charting growth rather than for reconciling a bill.
query Parameters
file_added_byfile_createdgranularitymoduleorigintypetzHeaders
X-Tenant-IdThe workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.
Get the storage trend › Responses
Success
