Folders

Access folders through client.folders in the Datature Vi SDK.

Datature Vi datasets are flat by default. Folders add a virtual tree on top: useful for browsing large collections in the UI and for filtering assets by parent folder. Folders do not move files on disk. They purely add navigable structure, so creating and deleting them never touches your media or annotations.

Before You Start

Get started with the Vi SDK →

Root Folder

Use "/" as the folder name to address the dataset root.


Methods

list()

List folders defined in a dataset.

folders = client.folders.list("dataset_abc123")

for folder in folders.items:
    print(folder.get("name"))
page = client.folders.list(
    dataset_id="dataset_abc123",
    sort_by="name",
    sort_order="asc",
)

for folder in page.all_items():
    print(folder["name"])
# Folders require a dataset_id, so use the call syntax to iterate
for folder in client.folders(dataset_id="dataset_abc123"):
    print(folder.get("name"))

Parameters

Name
Type
Description
Required
Default
dataset_id
string
Dataset to list folders in.
Required
filter_criteria
string | object
Optional filter expression.
Optional
None
sort_by
string
Sort field, for example 'name'.
Optional
None
sort_order
string
Sort direction, 'asc' or 'desc'.
Optional
None
page_size
integer
Page size cap.
Optional
None
page
string
Pagination cursor from a previous call.
Optional
None

Returns: PaginatedResponse[dict]. A page of folder documents.

Raises: ViValidationError if dataset_id is invalid. ViOperationError on an unexpected response shape.


get()

Fetch a single folder by name.

folder = client.folders.get("dataset_abc123", "raw/2025-05")

print(folder)
root = client.folders.get("dataset_abc123", "/")
print(root)

Parameters

Name
Type
Description
Required
Default
dataset_id
string
Owning dataset.
Required
folder_name
string
Folder name. Use '/' for the dataset root.
Required

Returns: dict. The folder document.

Raises: ViValidationError if parameters are invalid. ViNotFoundError if the folder does not exist.


children()

List the children of a folder: subfolders and assets in one heterogeneous page.

Each entry carries a kind of "Folder" or "Asset" plus the corresponding resource payload, mirroring the platform response shape so you can render breadcrumb-style navigation.

page = client.folders.children("dataset_abc123", "raw/2025-05")

for entry in page.all_items():
    if entry["kind"] == "Folder":
        print("DIR ", entry["resource"]["name"])
    else:
        print("FILE", entry["resource"]["filename"])
page = client.folders.children(
    dataset_id="dataset_abc123",
    folder_name="/",
    child_type="Folder",
)

for entry in page.all_items():
    print(entry["resource"]["name"])
def walk(dataset_id, folder="/", depth=0):
    page = client.folders.children(dataset_id, folder, child_type="All")
    for entry in page.all_items():
        name = entry["resource"].get("name") or entry["resource"].get("filename")
        print("  " * depth + name)
        if entry["kind"] == "Folder":
            walk(dataset_id, entry["resource"]["name"], depth + 1)

walk("dataset_abc123")

Parameters

Name
Type
Description
Required
Default
dataset_id
string
Owning dataset.
Required
folder_name
string
Parent folder name. Use '/' for the dataset root.
Required
child_type
string
Filter to 'Folder', 'Asset', or 'All'.
Optional
'All'
contents
boolean
Include extended asset content metadata.
Optional
None
page_size
integer
Page size cap.
Optional
None
page
string
Pagination cursor from a previous call.
Optional
None

Returns: PaginatedResponse[dict]. Heterogeneous page of {kind, resource} children.


put()

Create or overwrite a folder by name.

folder = client.folders.put(
    dataset_id="dataset_abc123",
    folder_name="raw/2025-05",
)

print(folder)
client.folders.put(
    dataset_id="dataset_abc123",
    folder_name="review/pending",
    owner="user_abc123",
)

Parameters

Name
Type
Description
Required
Default
dataset_id
string
Owning dataset.
Required
folder_name
string
Folder name to create or overwrite.
Required
owner
string
Optional owner identifier.
Optional
None

Returns: dict. The created or updated folder document.


delete()

Delete a folder by name.

client.folders.delete("dataset_abc123", "raw/2025-05/morning")

Parameters

Name
Type
Description
Required
Default
dataset_id
string
Owning dataset.
Required
folder_name
string
Folder name to delete.
Required

Returns: DeletedResource. Confirmation of deletion.


delete_all()

Delete every folder in a dataset.

Destructive

This removes all folder definitions in the dataset. The underlying assets and annotations are left intact, but the folder organization is not recoverable.

client.folders.delete_all("dataset_abc123")

Parameters

Name
Type
Description
Required
Default
dataset_id
string
Owning dataset.
Required

Returns: bool. True when the API confirms the bulk delete.


Response format

Folders are returned as plain dictionaries mirroring the platform's folder documents.

Common fields

Name
Type
Description
Required
Default
name
string
Folder name, including its path prefix
Optional
owner
string
Owner identifier, when set
Optional
metadata
object
Creation and update timestamps
Optional

For children(), each entry is a {kind, resource} pair where kind is "Folder" or "Asset".


Related resources

Assets API

Upload, download, list, and delete asset files within a dataset.

Datasets API

List, get, export, download, and delete datasets.

Asset Sources API

Inspect where the assets in a dataset came from.

Manage Assets

UI guide for organizing and bulk-editing dataset assets.


Did this page help you?