GenuineAIGenuineAI
For usersFor developers
  • Overview
  • Guides
  • How-to
  • API reference
Documentation
  • Quickstart
  • Authentication
  • Errors
  • Rate limits
  • API reference
Platform
  • Platform overview
  • Solutions
  • Pricing
  • Sign in
Company
  • Status
  • Trust Center
  • Contact
  • Terms of Service
  • Privacy Policy

© 2026 GenuineAI Ventures LLC

support@genuinehq.com
Overview
Core
Media library
AI
Documents
Knowledge
Creative
Website & content
Automation
Customer channels
Administration
    Users
    Roles
    Workspace settings
    Audit
    Storage
      List duplicate mediagetMerge duplicatespostGet a storage breakdowngetList the largest filesgetGet a stored filegetGet reclaimable spacegetGet storage usagegetGet the storage trendget
    Usage breakdown
    Media tag groups
    Media status flows
    Issued share links
    Social connections
    Social calendar
Schemas
GenuineAI API
GenuineAI API

Storage

What is stored, by whom, and what could be reclaimed — including the duplicate copies and the merge that removes them.


List duplicate media

GET
https://api.genuineai.app/api/v1
/admin/media-duplicates

Groups of byte-identical files, with the copy proposed as the one to keep.

List duplicate media › query Parameters

added_by
​string · uuid
file_type
​string · enum
Enum values:
image
video
audio
other
limit
​integer · min: 1 · max: 100
offset
​integer · min: 0
rule
​string · enum
Enum values:
references
metadata
oldest
newest
sort
​string · enum
Enum values:
waste
copies
name
recent

List duplicate media › Headers

X-Tenant-Id
​string · uuid · required

The 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

No data returned
GET/admin/media-duplicates
curl https://api.genuineai.app/api/v1/admin/media-duplicates \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
No example specified for this content type

Merge duplicates

POST
https://api.genuineai.app/api/v1
/admin/media-duplicates/resolve

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.

Merge duplicates › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

Merge duplicates › Request Body

​object[] · required
merge_metadata
​boolean

Merge duplicates › Responses

Success

No data returned
POST/admin/media-duplicates/resolve
curl https://api.genuineai.app/api/v1/admin/media-duplicates/resolve \ --request POST \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "groups": [ { "keep": "00000000-0000-0000-0000-000000000000", "remove": [ "00000000-0000-0000-0000-000000000000" ] } ], "merge_metadata": true }'
Example Request Body
{ "groups": [ { "keep": "00000000-0000-0000-0000-000000000000", "remove": [ "00000000-0000-0000-0000-000000000000" ] } ], "merge_metadata": true }
json
Example Responses
No example specified for this content type

Get a storage breakdown

GET
https://api.genuineai.app/api/v1
/admin/storage/breakdown

Grouped by module, file type or user — file count and total size per group.

Get a storage breakdown › query Parameters

group_by
​string · enum · required
Enum values:
module
type
user
origin
cursor
​string · maxLength: 512 · pattern: ^[A-Za-z0-9_-]+$
file_added_by
​string
file_created
​array
limit
​integer
module
​string · enum
Enum values:
media
knowledge
chat
chatAi
designs
presentations
prompts
forms
offset
​integer · min: 0
origin
​string · enum
Enum values:
uploaded
generated
sort
​string · minLength: 1 · maxLength: 64 · pattern: ^-?[a-z0-9_]+$
type
​string · enum
Enum values:
image
video
audio
pdf
font
document
spreadsheet
presentation

Get a storage breakdown › Headers

X-Tenant-Id
​string · uuid · required

The 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

No data returned
GET/admin/storage/breakdown
curl 'https://api.genuineai.app/api/v1/admin/storage/breakdown?group_by=<string>' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
No example specified for this content type

List the largest files

GET
https://api.genuineai.app/api/v1
/admin/storage/files

Returns the files consuming the most storage, largest first — the list to work down when reclaiming space.

List the largest files › query Parameters

cursor
​string · maxLength: 512 · pattern: ^[A-Za-z0-9_-]+$
file_added_by
​string
file_created
​array
limit
​integer
module
​string · enum
Enum values:
media
knowledge
chat
chatAi
designs
presentations
prompts
forms
offset
​integer · min: 0
origin
​string · enum
Enum values:
uploaded
generated
sort
​string · minLength: 1 · maxLength: 64 · pattern: ^-?[a-z0-9_]+$
type
​string · enum
Enum values:
image
video
audio
pdf
font
document
spreadsheet
presentation

List the largest files › Headers

X-Tenant-Id
​string · uuid · required

The 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

No data returned
GET/admin/storage/files
curl https://api.genuineai.app/api/v1/admin/storage/files \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
No example specified for this content type

Get a stored file

GET
https://api.genuineai.app/api/v1
/admin/storage/files/{id}

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.

Get a stored file › path Parameters

id
​string · uuid · required

Get a stored file › Headers

X-Tenant-Id
​string · uuid · required

The 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

No data returned
GET/admin/storage/files/{id}
curl https://api.genuineai.app/api/v1/admin/storage/files/:id \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
No example specified for this content type

Get reclaimable space

GET
https://api.genuineai.app/api/v1
/admin/storage/reclaim

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.

Get reclaimable space › Headers

X-Tenant-Id
​string · uuid · required

The 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

No data returned
GET/admin/storage/reclaim
curl https://api.genuineai.app/api/v1/admin/storage/reclaim \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
No example specified for this content type

Get storage usage

GET
https://api.genuineai.app/api/v1
/admin/storage/summary

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.

Get storage usage › Headers

X-Tenant-Id
​string · uuid · required

The 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

No data returned
GET/admin/storage/summary
curl https://api.genuineai.app/api/v1/admin/storage/summary \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
No example specified for this content type

Get the storage trend

GET
https://api.genuineai.app/api/v1
/admin/storage/trend

Stored bytes over time, for charting growth rather than for reconciling a bill.

Get the storage trend › query Parameters

file_added_by
​string
file_created
​array
granularity
​string · enum
Enum values:
day
month
module
​string · enum
Enum values:
media
knowledge
chat
chatAi
designs
presentations
prompts
forms
origin
​string · enum
Enum values:
uploaded
generated
type
​string · enum
Enum values:
image
video
audio
pdf
font
document
spreadsheet
presentation
tz
​string

Get the storage trend › Headers

X-Tenant-Id
​string · uuid · required

The 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

No data returned
GET/admin/storage/trend
curl https://api.genuineai.app/api/v1/admin/storage/trend \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
No example specified for this content type

AuditUsage breakdown