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
    List documentsgetDeprecate a documentpostRestore a documentpostTag documentspostList formatsget
    Document folders
      List foldersgetCreate a folderpostGet a foldergetDelete a folderdeleteUpdate a folderpatchAdd documentspostRemove documentsdeleteUpdate smart filterspatchList folder membershipgetCreate a smart folderpostGet folder statisticsget
    Document relations
Knowledge
Creative
Website & content
Automation
Customer channels
Administration
Schemas
GenuineAI API
GenuineAI API

Document folders

How the document library is organized: nested folders, and folders that fill themselves from a saved filter.


List folders

GET
https://api.genuineai.app/api/v1
/document-folders

Returns folders with how many documents each holds and how many folders sit inside it. Pass album_parent=root for the top level and a folder id to walk down, which is how the tree is drawn a level at a time rather than all at once. A smart folder carries the saved filter it resolves in album_query_search.

Requires the module-documents license feature. Without it the request is refused with 403 license_required — see plans and modules.

List folders › query Parameters

album_active
​boolean
album_created
​array
album_description
​string
album_id
​string · uuid
album_name
​string
album_parent
​string
album_updated
​array
cursor
​string · maxLength: 512 · pattern: ^[A-Za-z0-9_-]+$
full_text_search
​string
limit
​integer
offset
​integer · min: 0
sort
​string · minLength: 1 · maxLength: 64 · pattern: ^-?[a-z0-9_]+$

List folders › 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 folders › Responses

Success

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

Create a folder

POST
https://api.genuineai.app/api/v1
/document-folders

Creates a folder, which starts empty — put documents in it with POST /document-folders/{id}/files. Pass album_parent to nest it. A folder that fills itself from a saved filter is created through POST /document-folders/smart instead.

Requires the module-documents license feature. Without it the request is refused with 403 license_required — see plans and modules.

Create a folder › 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.

Create a folder › Request Body

album_name
​string · minLength: 1 · required
album_description
​string
album_cover_file
​string · uuid
album_metadata
​object
album_acl
​object
album_active
​boolean
album_smart
​boolean
album_query
​string · uuid
album_parent
​string

Create a folder › Responses

Created

No data returned
POST/document-folders
curl https://api.genuineai.app/api/v1/document-folders \ --request POST \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "album_name": "album_name", "album_description": "album_description", "album_cover_file": "00000000-0000-0000-0000-000000000000", "album_metadata": {}, "album_acl": {}, "album_active": true, "album_smart": true, "album_query": "00000000-0000-0000-0000-000000000000", "album_parent": "album_parent" }'
Example Request Body
{ "album_name": "album_name", "album_description": "album_description", "album_cover_file": "00000000-0000-0000-0000-000000000000", "album_metadata": {}, "album_acl": {}, "album_active": true, "album_smart": true, "album_query": "00000000-0000-0000-0000-000000000000", "album_parent": "album_parent" }
json
Example Responses
No example specified for this content type

Get a folder

GET
https://api.genuineai.app/api/v1
/document-folders/{id}

Returns the folder with its file and child counts, the path of folders above it, and — for a smart folder — the filter it resolves.

Requires the module-documents license feature. Without it the request is refused with 403 license_required — see plans and modules.

Get a folder › path Parameters

id
​string · uuid · required

Get a folder › 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 folder › Responses

Success

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

Delete a folder

DELETE
https://api.genuineai.app/api/v1
/document-folders/{id}

Removes the folder. The documents it held stay in the library, and folders inside it move to the top level.

Requires the module-documents license feature. Without it the request is refused with 403 license_required — see plans and modules.

Delete a folder › path Parameters

id
​string · uuid · required

Delete a folder › 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.

Delete a folder › Responses

Success. No content.

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

Update a folder

PATCH
https://api.genuineai.app/api/v1
/document-folders/{id}

Applies the album_-prefixed fields present in the body. Moving a folder under a new parent is a change to album_parent here; a move that would make a folder its own ancestor is refused. A smart folder's filter is changed through PATCH /document-folders/{id}/smart.

Requires the module-documents license feature. Without it the request is refused with 403 license_required — see plans and modules.

Update a folder › path Parameters

id
​string · uuid · required

Update a folder › 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.

Update a folder › Request Body optional

album_name
​string · minLength: 1
album_description
​string
album_cover_file
​string · uuid
album_metadata
​object
album_acl
​object
album_parent
​string

Update a folder › Responses

Success

No data returned
PATCH/document-folders/{id}
curl https://api.genuineai.app/api/v1/document-folders/:id \ --request PATCH \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "album_name": "album_name", "album_description": "album_description", "album_cover_file": "00000000-0000-0000-0000-000000000000", "album_metadata": {}, "album_acl": {}, "album_parent": "album_parent" }'
Example Request Body
{ "album_name": "album_name", "album_description": "album_description", "album_cover_file": "00000000-0000-0000-0000-000000000000", "album_metadata": {}, "album_acl": {}, "album_parent": "album_parent" }
json
Example Responses
No example specified for this content type

Add documents

POST
https://api.genuineai.app/api/v1
/document-folders/{id}/files

Puts documents in the folder. A document may sit in more than one. Ids that match no document in the library are skipped rather than failing the request, so a partly stale selection still lands.

Requires the module-documents license feature. Without it the request is refused with 403 license_required — see plans and modules.

Add documents › path Parameters

id
​string · uuid · required

Add documents › 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.

Add documents › Request Body

file_ids
​string[] · required

Add documents › Responses

Success

No data returned
POST/document-folders/{id}/files
curl https://api.genuineai.app/api/v1/document-folders/:id/files \ --request POST \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "file_ids": [ "00000000-0000-0000-0000-000000000000" ] }'
Example Request Body
{ "file_ids": [ "00000000-0000-0000-0000-000000000000" ] }
json
Example Responses
No example specified for this content type

Remove documents

DELETE
https://api.genuineai.app/api/v1
/document-folders/{id}/files

Takes the documents out of the folder and leaves them in the library.

Requires the module-documents license feature. Without it the request is refused with 403 license_required — see plans and modules.

Remove documents › path Parameters

id
​string · uuid · required

Remove documents › 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.

Remove documents › Request Body

file_ids
​string[] · required

Remove documents › Responses

Success

No data returned
DELETE/document-folders/{id}/files
curl https://api.genuineai.app/api/v1/document-folders/:id/files \ --request DELETE \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "file_ids": [ "00000000-0000-0000-0000-000000000000" ] }'
Example Request Body
{ "file_ids": [ "00000000-0000-0000-0000-000000000000" ] }
json
Example Responses
No example specified for this content type

Update smart filters

PATCH
https://api.genuineai.app/api/v1
/document-folders/{id}/smart

Replaces the saved filter a smart folder resolves. Membership is recomputed on read, so the change is visible immediately and no documents are moved.

Requires the module-documents license feature. Without it the request is refused with 403 license_required — see plans and modules.

Update smart filters › path Parameters

id
​string · uuid · required

Update smart filters › 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.

Update smart filters › Request Body optional

album_name
​string · minLength: 1
album_description
​string
query_search
​object

Update smart filters › Responses

Success

No data returned
PATCH/document-folders/{id}/smart
curl https://api.genuineai.app/api/v1/document-folders/:id/smart \ --request PATCH \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "album_name": "album_name", "album_description": "album_description", "query_search": {} }'
Example Request Body
{ "album_name": "album_name", "album_description": "album_description", "query_search": {} }
json
Example Responses
No example specified for this content type

List folder membership

GET
https://api.genuineai.app/api/v1
/document-folders/memberships

Returns which documents sit in which folder, without the document records themselves.

Requires the module-documents license feature. Without it the request is refused with 403 license_required — see plans and modules.

List folder membership › query Parameters

af_album
​string · uuid
af_file
​string
cursor
​string · maxLength: 512 · pattern: ^[A-Za-z0-9_-]+$
limit
​integer
offset
​integer · min: 0
sort
​string · minLength: 1 · maxLength: 64 · pattern: ^-?[a-z0-9_]+$

List folder membership › 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 folder membership › Responses

Success

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

Create a smart folder

POST
https://api.genuineai.app/api/v1
/document-folders/smart

A smart folder is a saved filter rather than a fixed list: its contents are whatever currently matches, so documents join and leave it on their own as the library changes.

Requires the module-documents license feature. Without it the request is refused with 403 license_required — see plans and modules.

Create a smart folder › 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.

Create a smart folder › Request Body

album_name
​string · minLength: 1 · required
query_search
​object · required
album_description
​string

Create a smart folder › Responses

Created

No data returned
POST/document-folders/smart
curl https://api.genuineai.app/api/v1/document-folders/smart \ --request POST \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "album_name": "album_name", "album_description": "album_description", "query_search": {} }'
Example Request Body
{ "album_name": "album_name", "album_description": "album_description", "query_search": {} }
json
Example Responses
No example specified for this content type

Get folder statistics

GET
https://api.genuineai.app/api/v1
/document-folders/stats

How many folders the workspace has. For counts within one folder, read the folder itself — it carries its own document and child counts.

Requires the module-documents license feature. Without it the request is refused with 403 license_required — see plans and modules.

Get folder statistics › 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 folder statistics › Responses

Success

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

DocumentsDocument relations