# Welcome

Welcome to Shade! Here you'll find docs on how to get started with Shade, how to use the Shade web and desktop app, and how to best configure your workspace.

### Jump right in

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Get the App</strong></td><td>Start with Shade in your browser or desktop</td><td><a href="/files/6H02zVZ1URfn57uOf3S8">/files/6H02zVZ1URfn57uOf3S8</a></td><td></td><td><a href="/pages/CyH2xJQs9yWJ1S8BYNav">/pages/CyH2xJQs9yWJ1S8BYNav</a></td></tr><tr><td><strong>Understand the Structure</strong></td><td>Learn the basics of how Shade is organized</td><td><a href="/files/oEws9v0wqLhU7FBdpW3P">/files/oEws9v0wqLhU7FBdpW3P</a></td><td></td><td><a href="/pages/JjjojIyKxaiBPzzLwvtg">/pages/JjjojIyKxaiBPzzLwvtg</a></td></tr><tr><td><strong>Learn 80% of Shade in 2 Minutes</strong></td><td>Start here if you are already familiar with other tools</td><td><a href="/files/1rx4ANItdFhrBcbVAWvM">/files/1rx4ANItdFhrBcbVAWvM</a></td><td></td><td><a href="/pages/s4pUdM4auE1GnENCUdll">/pages/s4pUdM4auE1GnENCUdll</a></td></tr></tbody></table>


# Using AI & the Academy Shade MCP

Easily understand how to use Shade by connecting our docs MCP directly into your LLMs

Connect the Academy Shade MCP to any MCP-compatible client with this server URL:

`https://academy.shade.inc/~gitbook/mcp`

If your client supports remote MCP servers, setup usually takes less than a minute.

### Quick dropdown

You can add the MCP or copy context directly from the docs.

<figure><img src="/files/LA81bpo5cSxewLhTUbZe" alt=""><figcaption></figcaption></figure>

### Add it to your client

{% hint style="info" %}
Different clients use different names. You may see **MCP server**, **connector**, **tool**, or **integration**. The flow is the same.
{% endhint %}

{% tabs %}
{% tab title="Claude" %}

1. Open Claude's **Settings**.
2. Find the **MCP**, **Tools**, or **Integrations** area.
3. Add a new server.
4. Name it **Academy Shade**.
5. Paste this URL:

   `https://academy.shade.inc/~gitbook/mcp`
6. Save the server.
7. Refresh Claude if needed.
8. Test it with:
   * `How do I set up a workspace in Shade?`
   * `What is the difference between guests and members?`
     {% endtab %}

{% tab title="Cursor" %}

1. Open Cursor **Settings**.
2. Go to the **MCP** or **Tools** section.
3. Add a new MCP server.
4. Name it **Academy Shade**.
5. Paste this URL:

   `https://academy.shade.inc/~gitbook/mcp`
6. Save the server.
7. Refresh Cursor if needed.
8. Use it from chat or agent mode with a prompt like:
   * `How does ShadeFS caching work?`
   * `How do I invite a guest into Shade?`
     {% endtab %}

{% tab title="ChatGPT / Codex" %}

1. Open your **Tools**, **Connectors**, or **MCP** settings.
2. Add a custom server if that option is available.
3. Name it **Academy Shade**.
4. Paste this URL:

   `https://academy.shade.inc/~gitbook/mcp`
5. Save the server.
6. Refresh the session if needed.
7. Test it with:
   * `How do permissions work in Shade?`
   * `How do I mount a drive in ShadeFS?`

If your ChatGPT or Codex environment does not expose custom MCP servers yet, use the Academy Shade MCP through Claude, Cursor, or another MCP-compatible client instead.
{% endtab %}

{% tab title="VS Code" %}

1. Open the MCP-compatible extension you use in VS Code.
2. Go to that extension's **MCP** or **Server** settings.
3. Add a new remote server.
4. Name it **Academy Shade**.
5. Paste this URL:

   `https://academy.shade.inc/~gitbook/mcp`
6. If prompted for transport, use the standard remote HTTP option the extension recommends.
7. Save the configuration.
8. Reload VS Code or restart the extension if needed.
9. Test it with:
   * `How do I create a BYOS drive in Shade?`
   * `How do comments work on assets?`
     {% endtab %}

{% tab title="Other MCP clients" %}

1. Open your client's **MCP**, **Tools**, or **Connectors** settings.
2. Add a new remote server.
3. Name it **Academy Shade**.
4. Paste this URL:

   `https://academy.shade.inc/~gitbook/mcp`
5. Save the configuration.
6. Refresh the client if needed.
7. Test it with:
   * `How do I search with AI in Shade?`
   * `What is the difference between guests and workspace members?`
     {% endtab %}
     {% endtabs %}

### What to expect after connecting

Once connected, your assistant can help with:

* Shade onboarding
* Workspace and permission questions
* ShadeFS setup and troubleshooting

It is best for product guidance, workflows, and docs lookups.

### Troubleshooting

If the server does not appear:

* Confirm the URL is exactly `https://academy.shade.inc/~gitbook/mcp`
* Refresh or fully restart the client
* Make sure your client supports remote MCP servers

If your client only supports local MCP servers, use an MCP-compatible client that supports remote servers instead.


# What is Shade

**Shade is an AI-powered media storage and collaboration platform that transforms how creative teams manage, search, and collaborate on media assets.**

We provide cloud storage with local file access, natural language search, and asset review, all in one unified platform.

### Our Vision: The CRM for Your File System

Companies today have files sprawled across 6-7 different tools and systems: stored on hard drives, cloud platforms, and everywhere in between. This fragmentation creates chaos, slows down workflows, and makes it nearly impossible to find what you need when you need it.

Shade is building the solution: **a unified file system that acts like a CRM for all your assets.**

We build both:

* **The file system layer**: Centralized storage that brings everything together
* **The workflow layer**: Tools to work, search, share, and automate files across your entire business

Instead of jumping between Dropbox, Google Drive, external hard drives, and server storage, Shade gives your team one intelligent platform where every file is accessible, searchable, and actionable.


# Get the App

## Web Platform

Shade offers a full web platform that allows you to easily and quickly search and share your files from anywhere. You have the full capability of Shade minus the real-time access file system and fast transfer that our desktop client provides. The web version is easy to access - simply head to [app.shade.inc](https://app.shade.inc/) or click on the **Get Started** tab on [shade.inc](https://shade.inc/).

## Local App

You unlock the full power of Shade with the Shade desktop application. The Shade desktop app is optimized for fast uploading and more importantly, real-time access to all your files via the Shade File System.

You can download the Shade App for MacOS Intel, MacOS Silicon, and Windows, on <https://shade.inc/download>. We recommend using the desktop app over the web for bulk uploading.

## FAQs

<details>

<summary>How do I update the desktop app?</summary>

Shade has a built in auto updater that runs for Mac, Linux and Windows. This will download the latest builds that we regularly release and will prompt you to update on your next app launch. Our AI models run locally, so you can expect some updates to take longer when we are updating the models on your machine.

</details>

<details>

<summary>What is the difference between the desktop app and the web app?</summary>

The web is great for a few things - quickly viewing and sharing files, managing permissions, and uploading files on the go if you do not have Shade downloaded.

Shade desktop offers the full web experience and more with the Shade File System. The desktop is where ShadeFS shines, with the ability to access files before the whole file is downloaded. Mount a shade drive to your computer and start using files in your applications.

We highly recommended that you use the desktop application if you plan on transferring more than 5 GBs of data.

</details>

<details>

<summary>How often do you guys release? Do you guys give updates?</summary>

Yes, we are active in our [Discord](https://discord.com/invite/h8wqFMJ4vK) and post regular change log updates. We typically try to release every two weeks depending on the scope of the release.

</details>


# Understand the Structure

{% embed url="<https://youtu.be/i5JRJB0fjLs?si=9XbcUEiEOxRhNmPv>" %}

## **Why did you design Shade this way?**

When we started Shade, we wanted to build a system that was intuitive to the experiences that we are all used to (like Google Drive or Dropbox), but also had the capabilities of modern productivity software like Notion and Figma. The Shade structure is defined to allow for a large amount of flexibility in how you’d like to structure your teams projects and work. You also have the ability to easily manage inheritance levels between members and guests.

Shade is designed to be a file system solution that not only offers superior search capabilities, but also a premium experience when it comes to managing external collaborators, team members, and assets.

## What is a workspace?

Workspaces are the base of Shade and is the top level in which you unify you, your team, projects, and assets. Simply, a workspace is a collection of drives and users. This is the “team” where you add members that will be involved in multiple projects. Your team is billed at the workspace level, which is the number of workspace members plus the total workspace storage usage. See how billing works at [Billing](/administration-and-security/billing).

### Creating a new workspace:

Your first workspace will automatically be created when you sign up for an account. You can switch between any number of workspaces from the workspace dropdown in the top left of the app. Each workspace is billed separately.

### Deleting a workspace:

Workspace admins can delete a workspace from Settings/General - this action cannot be undone.

### Renaming a workspace:

Workspace admins can rename a workspace from Settings/General.

### Workspace permissions:

**Workspace Members:** Your core team that can:

* Manage drive configurations
* Create and delete drives
* Manage drive access for guests
* Manage file and folder permissions for guests

**Workspace Admins** - Member level permissions and:

* Add workspace members
* Control billing
* View workspace usage details

{% content-ref url="/pages/8C73p2MA9ly4XcKKZpck" %}
[Workspace and Drive Permissions](/sharing-and-collaboration/workspace-and-drive-permissions)
{% endcontent-ref %}

## What are drives?

We created one more level to organize your media between the workspace level and your folders. When you use the desktop app, the drive is the level that can be mounted to your computer like a hard drive.

You can create a drive per project, per client, per shoot, or however you choose depending on you and your teams workflows. Our recommended solution is to choose a drive per client with separate folders for projects and shoots. This allows for maximum permission control, easy revocation, and access expiration for external collaborators and workspace members.&#x20;

See more organization tips at [Designing Your Permission Hierarchy](/sharing-and-collaboration/designing-your-permission-hierarchy#drive-level-access).

### Deleting a Drive:

Drive admins can delete a drive from Settings/\[drive name]/General. This action cannot be undone.

### Renaming a Drive:

Drive admins can rename a drive from Settings/\[drive name]/General. Note that mounted drives will not have their name changed until you re-mount the drive.


# Learn 80% of Shade in 2 minutes

Most of the ways you will use Shade on a day-to-day can be learned in [2 minutes](https://www.youtube.com/watch?v=qiTMrJkC40Q).

{% stepper %}
{% step %}

## Use natural language in your AI search

Our neural search works best when you use natural language instead of tags. You can also search an individual folder instead of the current drive with **`cmd/ctrl+f`**. Alternatively, you can access the AI Search via our Command Pallete with **`cmd/ctrl+k`**

<figure><img src="/files/0wMh2xmCa7etYcGWp6NO" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

## Filter for specific attributes

Get granular with filters on file level attributes or custom metadata.

<figure><img src="/files/ipqiKzg20hFoZeEJqPJs" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

## Share externally with invites or published links

Right click on any folder or asset to invite collaborators via email or send out published links with optional passwords, expiration dates, and view limits.

<figure><img src="/files/UNbJ5g0TUYGS306oFBPk" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

## Manage your ShadeFS mount

ShadeFS works by allotting cache space on your computer or an external directory. After you set up ShadeFS, you can adjust these settings and get to work by hitting “mount” on any drive on the left panel. Right-click any file or folder and select "Pin to Cache" to keep important assets available offline for instant access.

<figure><img src="/files/PteESLhnqJ2ie24IW8tK" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

## Put it all together

Start with an AI search to find what you are looking for, review the comments, and open the file locally to start working.

<figure><img src="/files/b3JARfv2Lb4izAbatSw4" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}


# Start Uploading Assets

You can upload to Shade from the browser, phone, desktop app, file explorer, plane, Samsung Smart Fridge - you get the idea.

{% embed url="<https://youtu.be/ja56PFUPS4I?si=VvOfJKxpGDYFDiki>" %}

<figure><img src="/files/gq3NVIyEadddIIeseBYr" alt=""><figcaption></figcaption></figure>

## Upload from the browser

This is as simple as drag and drop. That’s it. If you are feeling fancy you can hit the upload button on the top right.

## Upload from the desktop app

Also just as easy - just drag and drop or hit the button on the top right.

## Upload from a mounted drive

Since Shade can act like a mounted drive on your desktop, you can treat it as such. Anything you upload to a mounted drive will be automatically indexed on the app.

## Upload Statuses

When a file is uploaded to Shade, you will be able to view the upload status in the status menu located in the bottom left. Popping open this menu will reveal the job state your asset is currently in which includes:

{% tabs %}
{% tab title="Upload Status" %}

* Upload names, sizes, locations, and timestamps per drive
* Ability to stop and start uploads and navigate to uploaded files
  {% endtab %}

{% tab title="Downloading Status" %}

* Names, statuses, and timestamps of downloads
* Whether these were Shade-generated proxies
  {% endtab %}

{% tab title="Indexing Status" %}

* Basic Jobs, including file syncing, updating metadata, and preview/proxy generation
* AI Jobs, including visual and audio indexing and custom metadata generation
* Additional Jobs, including color palette, facial recognition, and transcription
  {% endtab %}

{% tab title="Mount Status" %}

* Status of sync with your mounted drives
  {% endtab %}
  {% endtabs %}


# The Shade Method

These are the principles and practices that govern how we built Shade and how to use Shade the way we intended for it to be used.

## **Principles**

### **Empower Your Story**

Focus on telling your story, don’t be undermined by the software you use. Any hiccup of waiting, slowness, or error is an impact on a creator’s storytelling.

### **Automate the Mundane**

The mundane, such as file transfer, uploading and downloading, tagging, should be eliminated from the creative workflow. Teams have important things to focus on.

### **Keep Consistent Nomenclature**

Workspaces are workspaces. Drives are drives. Whatever you define your structure to be, stick with it and maintain consistency.

### **Build a Paradigm, Not a Product**

Products are stationary and stagnant. Paradigm’s shift and adapt to the customer’s needs. Build a system that scales with the company and introduces complexity as needed, not upfront.

### **Any security you don’t know is a security threat**

Share your files sparingly, your files and assets are your greatest asset, be cognizant and aware of who you are sharing and what files you are sharing. Practice least access principles by restricting drives and workspaces. Remove guests after specific times and dates based on work duration.

## **The Modern File System**

### **It’s not about the location, it’s about the file**

The modern file system should help you quickly answer who has access to what file in what context and what location. It should streamline retrieval, sharing, and access regardless of the location of the asset.

### **Set abstractions for daily work, prioritize searchability for the future**

The modern file system is as good as you configure it. Keep clean search indices so that you can find what you need. Avoid duplicate files and folder structures, transfer files that you don’t need into archive stores and backup systems. Prioritize a cleanly workspace so that your team is optimized to tell the stories it needs to tell.

### **Work like you’re in an office together**

A team is built around collaboration. The modern file system should feel like you are working in an office together despite being in different places. Whether it’s permission management, file sharing, or unified search. The files should feel like they’re plugged into your computer.

### **A file system that evolves with you**

The file system isn’t a stagnant piece of tech, it’s something that accumulates over time. The more files, the more important it is to evolve and understand your files so you never lose an asset again. It should recommend you what you need and automate the mundane, so you can focus on your creative endeavors.

## **Creative Storytelling**

### **Share with Inheritance**

Sharing should be done in an inheritance method so that permissions are inherited and properly managed. Sharing should be done securely and should be done on a least-privilege paradigm so that only the people who need that file have access to it.

### **Manage Projects**

Projects should be created at the drive or folder level. But be consistent in how your system is structured. Easily move items between drives for different purposes.

### **Create Delightful Delivery Experiences.**

Delivery to your clients should be inspiring and moving. Build delightful client experiences that help them tell their story.


# Setting Up Workspaces and Drives

Here are a few examples of how Shade users have been configuring their Shade workspace and drives.

{% embed url="<https://youtu.be/GFpVyBT4qP4?si=rnmWyglpKclIvZGx>" %}

## **I’m an individual just getting started, but I want to be able to share a few things with some people.**

When you sign up with Shade you automatically get your own personal workspace. To keep your items separate from external projects, you would want to create at least 1 additional drive:

Copy

```
Reece's Personal Workspace
├── Default Drive
└── Project 1
```

You can now invite team members to collaborate with you in your project drive, or invite guests at folder level. If you want to move or copy the files between the two drives, you can mount both drives to your desktop and use Finder for those operations. Learn more about mounting and ShadeFS at [ShadeFS](/shadefs/introduction-to-shadefs). If however, you know that these guests will need to access multiple drives and projects, it might be a good idea to create a team workspace and invite them as members.

## **I’m a production team and I have 10 clients, how should I organize my team and assets with Shade?**

First, if you have not already, create a workspace for your team and invite your team members to that workspace. Your team members will inherit specific permission levels per drive based on your drive permission configuration (learn how at [Workspace and Drive Permissions](/sharing-and-collaboration/workspace-and-drive-permissions)). We would not recommend adding your clients at the workspace level unless you believe they will access multiple drives.

External clients should be managed and handled as a guests in Shade (users invited below the workspace level). Guests allow you to explicitly provide specific types of access and control at the drive, folder, or file level. Depending on how you might work with your client, you might separate out their projects by folder and have drives specific to each client. Here are a few examples:

```
Shade Studios Workspace
├── Client 1 Drive
│   ├── Project 1 Folder
│   └── Project 2 Folder
├── Client 2 Drive
└── Client 3 Drive
```

```
Shade Studios Workspace
├── Client 1 Project A Drive
├── Client 1 Project B Drive
├── Client 2 Project A Drive
├── Client 2 Project B Drive
└── Client 2 Project C Drive
```

Another option is to invite your clients as workspace members and then restrict their default inheritance on drives to be **`None`** or **`View Only.`**

## **I’m a 100 person company, managing multiple projects, spanning from a variety of different departments and groups, how should I work with Shade?**

There is a good chance that you will need to create multiple workspaces at this size. If you believe that to be the case, please reach out our team so we can unify all the workspaces under a branded organization with billing configured at an organization level.

If you intend to work under one workspace, you will likely want to set up multiple drives per team:

Copy

```
Shade Studios Workspace
├── Team 1 Drive A
│   ├── 2025 Projects
│   └── 2026 Projects
├── Team 1 Drive B
│   ├── Video
│   └── Digital Media
├── Team 2 Drive A
...
├── Team 2 Drive Z
└── Team 3 Drive A
```

Many enterprise users also find it useful to create an **Archived Assets** drive which acts as the B-roll drive accessible by anyone in the workspace.

Next, enable SSO/SAML from the Settings → Enterprise page in the app.


# Workspace Settings

Workspace members and admins have access to different workspace settings from the workspace settings page.

## Workspace Members and Guests

Have the ability to leave a workspace. That's it.

## Workspace Admins

* Can change anyone’s permission in the workspace
* Can change the workspace name and logo from the Workspace/General page
* Can invite new members to the workspace
* Can manage SSO/SAML
* Can monitor workspace usage, plans, and billing
* Can change the default inheritance on drives in the workspace

## Workspace Owner

Cannot leave a workspace without assigning ownership to someone else first. Ownership can only be assigned to workspace admins.


# Drive Templates

## Drive Templates and Reusing Metadata Schemas

Custom metadata attributes are powerful tools for organizing assets across your drives, but each schema you build lives at the drive level. If you want the same set of fields to apply to multiple drives — for example, a consistent baseline across every project drive on your team — you'll need to use a template-based workflow. This article walks through how metadata schemas are scoped, the two recommended ways to reuse them today, and what's on the horizon for cross-drive management.

***

### How Metadata Schemas Are Scoped

Every metadata attribute you create in Shade is **drive-specific**. When you add a new field to a drive, that field applies to all assets within that drive — not to a single folder, and not across other drives in your workspace.

Under the hood, your metadata schema is stored as a JSON field (`custom_metadata_attributes`) at the drive level. This is what makes drive-level reuse possible: when a drive is duplicated, that JSON travels with it.

Metadata attributes can be:

* Populated **manually** by team members
* Populated **automatically with AI**, using a custom prompt you define when you toggle on Autofill with AI

> 💡 For a refresher on creating attributes, see *Custom and Automated Metadata*.

***

### Why You Might Want to Reuse a Schema

Many teams build a thoughtful metadata schema for one drive — covering things like project phase, content type, talent, or campaign — and then realize they want the same structure on every new drive they spin up. Without a way to reuse that schema, you'd have to recreate every attribute by hand each time, which is both time-consuming and error-prone if attributes drift between drives.

The two approaches below let you skip that work.

***

### Approach 1: Duplicate an Existing Drive

The fastest way to carry a metadata schema into a new drive is to duplicate a drive that already has the schema you want.

**To duplicate a drive:**

1. Right-click the drive in your sidebar
2. Select **Duplicate Drive**

The duplicate preserves your full metadata schema as part of the new drive. You can then:

* Rename the new drive for its new purpose
* Use **folder templates** to populate the folder structure
* Begin adding assets

This is the simplest path when you already have a "good" drive whose schema you want to clone.

***

### Approach 2: Build a Template Drive

If you regularly create new drives — for example, one per client, project, or shoot — the recommended pattern is to maintain a dedicated **template drive**.

**To set this up:**

1. Create a new, empty drive named something like `[Template] Project Drive`
2. Configure your full metadata schema on it (every field, every AI prompt, every option list)
3. Leave it empty of assets
4. Whenever you need a new project drive, duplicate the template drive instead of starting from scratch

This keeps your "canonical" schema in one place. When you want to update the schema for future projects, you update the template — and any new duplicates inherit the changes.

> ⚠️ **Note:** Updating the template drive does not retroactively update drives that were duplicated from it in the past. Each duplicated drive becomes independent at the moment of duplication.

***

### Current Limitations

It's worth being upfront about what's not yet possible:

* **No global / account-level metadata schema.** There is currently no way to define a baseline set of metadata attributes that automatically applies to every drive in your workspace. Each drive's schema is independent once created.
* **No native cross-drive sync.** If you change an attribute on your template drive, drives that were already duplicated from it will not update. Schema changes need to be applied per drive.
* **No standardized default view across drives.** Teams cannot yet enforce a single shared layout or view configuration across all drives.

For most teams, the duplicate-drive workflow handles these gaps in practice — but the tradeoffs are worth knowing as you design your setup.

***

### What's Being Explored

Cross-drive and account-level schema management is an active area of product investigation. Items currently being tracked include:

* **Account-level metadata management** — the ability to define a workspace-wide baseline schema that all drives inherit, with drive admins able to extend it
* **Default drive layout for all drives** — letting teams standardize views and metadata fields across drives for all users
* **Custom Objects at the workspace level** — defining objects globally and enabling them on specific drives

If any of these are blocking your team's setup, let your account contact know — customer feedback directly influences prioritization.

***

### FAQs

<details>

<summary><strong>If I duplicate a drive, do the assets come with it?</strong></summary>

No. Duplicating a drive copies the schema and configuration, but not the assets inside it. You'll start with an empty drive that has your metadata fields ready to go.

</details>

<details>

<summary><strong>Can I update my template drive and have changes flow to all drives I previously duplicated from it?</strong></summary>

Not currently. Each duplicated drive becomes independent. Schema changes after the fact need to be applied to each drive individually.

</details>

<details>

<summary><strong>What's the difference between folder templates and drive duplication?</strong></summary>

Folder templates control the **folder structure** inside a drive. Drive duplication copies the **entire drive configuration**, including the metadata schema, views, and folder templates. They're complementary — most teams use both together.

</details>

<details>

<summary><strong>Is there a way to bulk-apply a schema to drives I've already created?</strong></summary>

Not today. Schema changes have to be made on each drive individually. Account-level metadata management (which would address this) is being tracked as a product request.

</details>


# Drive Status Menu

The drive status menu pops up automatically when you initiate an upload from a local drive into the app, and can be brought up manually by clicking the tray in the bottom left corner of the app. The drive you want to view the status for can be selected at the top of this menu.

Going left to right:

## **Uploading Status**

This panel shows you the status of any uploads you have initiated through the web app. This includes upload speed, time left, and the ability to cancel uploads.

## **Downloading Status**

This panel shows you the status of any downloads you have initiated through the web app. This includes download speed, time left, and the ability to cancel downloads.

## **Indexing Status**

This panel shows you the status of the jobs that are run on your uploaded assets:

**Basic Jobs:**

* Syncing with mounted drives
* Generating Previews and Proxies

**AI Jobs:**

* Audio generation
* Automated custom metadata

**Additional Jobs**

* Color Palette
* Facial Recognition
* Transcription

## **Mount Status**

This panel shows you the status of any uploads you have initiated through the ShadeFS mount, and status for syncing any changes from other editors. These are files you uploading through the mount in your file explorer. This includes upload speed, and time left.


# Drive Settings

Drive settings can be accessed be either right clicking on the drive in the left panel or by going to the workspace settings from the left panel and then scrolling down to the drive on the left.

Drive settings can be controlled by anyone that has admin access on the workspace. This includes:

* Changing the drive name
* Changing the drive icon&#x20;
* Deleting the drive

Note that **full access** drive members ***cannot*** change drive settings or metadata. Only workspace admins can change settings and metadata.


# Folder Templates

Folder templates for when you leverage the same folder structure repeatedly. This is most comment for projects that follow a given folder structure for every new project that gets spun up. At the moment, folder templates only support a set folder structure, and cannot also include files.

### Creating folder templates

1. From within a Drive, create a desired folder structure within a parent folder, or navigate to an already existing folder structure contained within a parent folder
2. Right-click on the parent folder containing the desired folder structure
3. Select **Save as folder template**
4. Color-code and name your template
5. Add an optional description so people know what the template is used for
6. Save to Workspace if the template should be usable across any/all Drives within your Workspace.
7. Click **Create Template** to Save

### Using a folder template

From within a Drive

1. Navigate within the folder hierarchy to where the folder should go
2. Right-click and hover over **Create new folder**
3. Select your template from the fly out menu

### Manage existing folder templates

#### Drive-level templates

1. Right-click on a Drive
2. Click **View Folder Templates**
3. Rename or delete your Drive-level folder templates

#### Workspace-level templates

1. Go to Settings > General > Folder Templates
2. Click **Manage Folder Templates**
3. Rename or delete your Workspace-level folder templates


# Managing your Trash

Deleting files from the Shade webapp or desktop will move them to the trash folder which can be found on the left panel under the drive. Trashed items can be recovered by right-clicking and moving the folder or asset back to the drive root.

{% embed url="<https://youtu.be/yR0I3PkSKbg?si=LXKMGEDez2Zw3p_D>" %}

<figure><img src="/files/WhSUJkGbfEnAyChezOO8" alt=""><figcaption></figcaption></figure>

{% hint style="danger" %}
Files deleted from the ShadeFS mount are not recoverable
{% endhint %}

Items moved to your trash still count towards your workspace storage. To permanently delete items in your trash:

* Navigating to the **Trash** tab under your drive
* Right click the items you want to delete
* Press **Delete Immediately**&#x20;


# Zapier Integration

Shade's Zapier integration allows you to connect your workspace to thousands of external tools and services. You can use Shade as a trigger — listening for events like uploads or completed transcriptions — or as an action target, performing operations in Shade in response to events elsewhere. This makes it straightforward to build automated workflows without writing any code.

## Getting Started

Before connecting Shade to Zapier, you'll need three things from your workspace settings:

* **Zapier Integration Key** — Found in Settings → For Developers. This key is unique to your workspace.
* **Application ID** — Also available in the For Developers section. This is your workspace ID.
* **API Key** — Generated separately via Settings → API Keys.

When connecting your Shade account inside Zapier, you'll be prompted to enter all three. Once connected, your Shade workspace will be available as both a trigger source and an action target across your Zaps.

## Configuring Webhooks

The Webhooks Dashboard (Settings → For Developers) is where you manage the events Shade sends to external services. From this page, you can configure an endpoint URL (such as a Zapier webhook URL) to receive events emitted by your workspace.

Events are emitted for key moments in your workflow, such as when a file is uploaded or when a transcription finishes. Each event includes relevant metadata about the asset involved, which downstream services can use to take further action.

## Triggers and Actions

Inside Zapier, Shade supports both triggers and actions, giving you flexibility in how you build your workflows.

*Triggers* listen for events in Shade and kick off a Zap when something happens, such as a new file being uploaded or a transcription completing.

*Actions* let other apps drive activity inside Shade, such as generating a share link for a specific asset.

## Example Workflows

* **Generate a share link on upload:** When a file is uploaded to Shade, automatically generate and share a public link, useful for distributing assets to external stakeholders without manual steps.

<figure><img src="/files/uMJWvrCOBOoRZB6AtT6t" alt=""><figcaption></figcaption></figure>

* **Send transcriptions to an external service:** When a transcription completes, forward the transcript content to another tool such as a document editor, CRM, or notification service.

## Finding Assets in Zapier Workflows

When a file is first uploaded to Shade, its asset ID is not immediately known to external systems. To reference a specific asset in a subsequent action, use the asset's **path**, which is included in the upload webhook payload. The path uniquely identifies the asset's location within your drive and can be used to look up or act on the asset in Shade from within your Zap. You can also use the asset’s ID in a separate action.

## Things to Keep in Mind

* Your Zapier Integration Key is workspace-specific. If you're managing multiple Shade workspaces, each will have its own key.
* API keys are managed separately from the integration key and can be generated or revoked via Settings → API Keys.
* Webhook endpoints must be configured in the Webhooks Dashboard before Shade will begin sending events to an external service.

For more information on how to configure Zapier automations, refer to Zapier’s documentation here: <https://help.zapier.com/hc/en-us/articles/22234847450893-Zaps-quick-start-guide>


# Guests vs Workspace Members

What's the difference between a guest and a workspace, and when to use

### Guests vs Workspace Members

**What's the difference, and when to use each**

#### Understanding the Difference Between Guests and Workspace Members

In Shade, there are two core user types: **Workspace Admins & Members** (internal users) and **Guests** (external collaborators). Below is a clear breakdown of how they differ and when to use each.

{% embed url="<https://youtu.be/LSQs4DwX_lw?si=1_WitVBe08dan8_V>" %}

***

### Workspace Admins and Members

Workspace admins and members (collectively *internal members*) are individuals within your organization who collaborate inside your workspace. These users occupy **paid seats**.

> Important clarification: Being a workspace member does not automatically grant access to drives, files, or advanced actions (like mounting drives or editing drive-level metadata). Access is granted per drive, either explicitly by an admin or via default inheritance settings.

#### What workspace members can do

Workspace members have the *ability* to use all of Shade’s features **once they are granted access** to the relevant drives or assets. Depending on drive-level permissions, this can include:

* Accessing one or more drives
* Uploading, editing, and organizing assets
* Mounting drives *(only if they have sufficient permissions on that drive)*
* Managing and creating custom metadata *(only where permitted)*
* Tagging assets
* Using advanced features such as facial recognition *(where enabled and permitted)*

Workspace members do **not** automatically have Manager or Editor access on existing drives. Admins must:

* Explicitly add members to drives, **or**
* Configure **default drive inheritance** that applies to new (and optionally existing) drives

#### Paid seats & identity management

Workspace members are paid seats and are typically restricted to your company domain. They can be fully integrated with enterprise identity systems:

* SSO / SAML enforcement
* SCIM or Active Directory syncing
* Just-in-time (JIT) provisioning

All users provisioned via SCIM are considered workspace members and therefore occupy paid seats.

#### Key Notes for Workspace Members

* **Paid Seats:** Workspace membership requires a paid account.
* **Permission-Based Access:** Access to drives and features depends on drive-level permissions and inheritance, not membership alone.
* **Enterprise Controls:** Workspace members can be governed via SSO/SAML and SCIM.

***

### Contractors (Special Case)

Contractors are another role under members, but are intentionally **not included in default drive inheritance**.

This allows contractors to:

* Be managed like internal users (identity, auditing, easy offboarding)
* Be added to specific drives, folders, or files only
* Avoid automatically receiving access to newly created drives

This model is ideal when someone is working *inside* Shade but should only see a tightly scoped subset of content. This will also apply to mounting, where upon mounting contractors will only see those specific files/folders.

***

### Guests

Guests enable collaboration with people **outside your organization** without granting full workspace membership. Guests do **not** occupy paid seats.

Guests are typically invited to:

* A specific file
* A specific folder
* Content shared via a public or private link

Guests can be viewed and managed under **Workspace > Manage Members > Guests**.

#### What guests can do

* Access only the files or folders explicitly shared with them
* Upload files if granted upload permissions
* Comment on or edit assets if allowed

#### What guests cannot do

* Browse the workspace or drives
* Mount drives
* Access other content unless explicitly shared

Guests cannot mount drives. You must be an internal workspace member (paid seat) to mount drives.

#### Cost & flexibility

* Guests do **not** count toward seat limits
* Guests can be upgraded to workspace members at any time
* Often used for executives, clients, vendors, or infrequent collaborators

***

### Alternative to Guests: Link Sharing & Collection Links

It is oftentimes easier to simply share files with external collaborators using links and public sharing. Links can be created on the file, folder, or even collection level to ensure that people can access, download, upload, and even comment and edit metadata fields that are enabled for the link.

Links also offer expiring access, password protection, watermarking, and display controls. Check out more about links [here](/sharing-and-collaboration/published-links).

***

### When to Use Workspace Members vs Guests

| Use Case                                                       | Workspace Member | Contractor | Guest         |
| -------------------------------------------------------------- | ---------------- | ---------- | ------------- |
| Core team member who needs to manage permissions and drives    | ✅                | ✅          | ❌             |
| Needs to Mount                                                 | ✅                | ✅          | ❌             |
| Requires enterprise SSO / SCIM provisioning                    | ✅                | ✅          | ❌             |
| Restricted Access to specific folders and files within a drive | ❌                | ✅          | ✅             |
| Client or vendor with limited scope                            | ❌                | ✅          | ✅             |
| One-off file or folder collaboration                           | ❌                | ❌          | ✅             |
| Temporary access with no account setup                         | ❌                | ❌          | ✅ (via links) |

***

In summary, **workspace members** are best for internal or long-term collaborators who need scalable access governed by drive permissions, while **guests and links** are ideal for external, scoped, and cost-effective collaboration.

**Workspace**

<figure><img src="/files/bJ6u8NRd3LzMQczXPbuO" alt=""><figcaption></figcaption></figure>

**Guests**

<figure><img src="/files/NcZUpHsSfplwvmEMr9v1" alt=""><figcaption></figcaption></figure>


# Permission Management Overview

We designed permissions to be managed at the workspace, drive, folder, and file level. Anyone that is not a workspace member or admin is considered a **workspace guest**.

{% embed url="<https://youtu.be/5ySa_BG-8KE?si=Vn8WXzixDYa1rlEx>" %}

For a more detailed overview, visit the [Workspace and Drive Permissions](/sharing-and-collaboration/workspace-and-drive-permissions) page:

### Workspace Permissions

#### Adding workspace members:

Workspace members can be invited by navigating to the workspace Settings > Members tab. Workspace members and admins have the following permissions:

#### **Workspace Admins**

Member permissions and:

* Add workspace members
* Control billing
* View workspace usage details
* Manage all drives and permissions across the workspace

Workspace owners cannot leave a workspace without transferring ownership to another admin

#### **Workspace Members**

Your core team that can:

* Create new drives
* Manage drive configurations for drives where they have been granted Manager permissions
* Manage drive access for guests on drives where they have Manager permissions
* Manage file and folder permissions for guests on drives where they have access
* Mount Drives

**Note:** Workspace members do not automatically have Manager permissions on existing drives. Admins must explicitly grant Manager permissions on each drive, or set default inheritance permissions for the workspace.

#### Viewing All Permissions for a Workspace

Workspace admins can see a global view of all permissions from the workspace Settings > Members page. Selecting an individual on this page will reveal the tree of what they have access to.

#### Workspace Permission Inheritance

Workspace admins can manage the **default inheritance permissions** of drives. These define the access level workspace members will have to newly created drives and can be applied to existing drives. The default inheritance permissions are `Full Access` by default, but this does not automatically grant Manager permissions unless explicitly set.

**Important:** Members must be explicitly granted Manager permissions on each drive by admins, or admins can set default inheritance permissions for the workspace that will apply to new drives.

### Drive Permissions

#### Adding drive members

Drive members can be invited by navigating from the workspace Settings > \[drive name] > PermissionsMembers tab. Workspace members will only have the permissions explicitly granted to them on each drive:

**Viewer:** Only view files

**Downloader:** Can view and download files

**Commenting:** Viewer permissions plus commenting

**Editor:** Commenting permissions plus file deletion, renaming, and reorganization

**Full Access:** Editor permissions plus file-level permission management

**Drive Manager (Admin):** Full Access permissions plus drive renaming, deletion and drive-level permission management.

#### Viewing All Permissions for a Drive

Drive managers and workspace admins can see a global view of all permissions from the workspace Settings > \[drive name] > PermissionsMembers page. Selecting an individual on this page will reveal the tree of what they have access to.

### File and Folder Permissions

Workspace and drive members will already have access to all files in their respective workspace or drive based on their drive-level permissions. Guests can be invited to files and folders by right clicking on the asset or asset path. Guests can be invited to files and folders with the following permissions:

**Viewer:** Only view files

**Downloader:** Viewer permissions plus downloading

**Commenting:** Viewer permissions plus commenting

**Editor:** Commenting permissions plus deletion, renaming, and reorganization

**Full Access:** Editor permissions plus permission management

### Published Links

Published links are great for inviting external collaborators that need temporary access to a folder or file. You can use preset permission levels or create a custom link.

**Preset levels**

* Viewing: View the asset
* Downloading: View and download the asset
* Commenting: Downloading plus commenting
* Editing: Commenting plus uploading, renaming, and deletion
* Full Access: Can Edit and also share with others

**Custom link permissions**

* Commenting
* Downloading
* Viewing Metadata
* Editing Metadata
* Uploading

Published links can also use passwords, expiration dates, and view limits. Link activity can be reviewed after sharing.


# Workspace and Drive Permissions

Our permission system provides granular access control across workspaces, drives, and files while maintaining simplicity through intelligent inheritance rules. This guide explains how permissions work at each level and how they interact.

### Overview

The permission hierarchy consists of three levels:

1. Workspaces
2. Drives
3. Files and Folders

### Core Concepts

#### Workspace Members vs Guests

**Workspace members** are users who have been explicitly added to a workspace as either admins or members. They can mount drives and receive automatic access based on drive inheritance settings.

**Contractors** are a special type of workspace member with restricted permissions who do not inherit drive access automatically. They must be explicitly invited to drives or can be granted access to specific files and folders. When mounting they will also only see these files.

**Guests** are users who have access to specific files, folders, or drives but haven't been added at the workspace level. They can perform actions like editing, commenting, and deleting (based on their permission level) but only through the application or web interface.

<figure><img src="/files/mwVplv72ciNCKdecX1bk" alt=""><figcaption></figcaption></figure>

### Drive Inheritance

Each drive has a **default inheritance** setting that determines the base permission level for all workspace members. For example, if a drive's default inheritance is set to "view", all workspace members automatically receive view access without being listed in the drive's member table.

When a workspace member's permissions are explicitly modified to differ from the default inheritance, they appear in the drive's member table. This makes it easy to track custom permission assignments.

### Permission Propagation

Permissions can be assigned at any level:

* Workspace level (members and admins)
* Drive level (explicit permissions)
* File/folder level (shared access)

Higher-level permissions flow down unless explicitly overridden at a lower level.

<figure><img src="/files/83zrpjyelYyr3drHJpAP" alt=""><figcaption></figcaption></figure>

## Access Levels

### Workspace Level

* **Owner**: Highest level of access; can transfer ownership to other admins
* **Admin**: Full control over workspace settings, drives, and members
* **Member**: Base level workspace access with drive permissions determined by inheritance
* **Contributor**: Workspace member with inherited drive access, but without the ability to create new drives
* **Contractor**: Workspace member with restricted permissions who does not inherit drive access automatically. Contractors must be explicitly invited to drives, or can be granted access to specific files and folders without broader drive visibility.
* **Guest**: Access to specific resources without workspace-level permissions

<figure><img src="/files/vIX4AeZTYjMnXiisUtFY" alt=""><figcaption></figcaption></figure>

### Drive Level

* **Manager**: Automatically granted to workspace admins. Has full control over drive contents and settings, including the ability to modify default inheritance settings.
* **Full Access**: Complete control over drive contents and file-level permission management, but cannot modify drive settings or default inheritance (no admin permissions at the drive level).
* **Edit**: Can modify files and folders
* **Comment**: Can view and comment on contents
* **Download**: Can view and download contents
* **View**: Can view contents without download access

## How Sharing Works

When sharing resources, permissions are granted progressively:

1. Sharing a file/folder makes the recipient a guest at both workspace and drive levels
2. Sharing a drive makes them a drive member (while remaining a workspace guest)
3. Sharing at workspace level makes them a full workspace member

Users can progress through these levels as needed, gaining broader access rights at each step.

## Workspace Ownership Transfer

If someone else will be taking over ownership of your Shade account, you’ll want to follow the following steps:

1. Navigate to Settings > My Workspace > **Members**
2. Promote an already existing user in your account to Owner OR invite the new user and make them an Owner
3. Once their invite has been accepted, within Setting navigate to My Workspace > Billing > Payment & Invoices > **Manage Payment Methods**
4. Click **Manage Payment Methods**
5. On the webpage that opens, click **Edit details** within the Customer information section
6. Update the point of contact info, including the new email address of the owner
7. Once all has been completed, the new Owner can safely remove you from the account.

## FAQs

<details>

<summary><strong>What happens when downgrading a user below the drive's default inheritance?</strong></summary>

You must explicitly invite their email to the drive with the desired lower permission level. This will make them appear in the drive's member table since their access now differs from the default.

</details>

<details>

<summary><strong>If a drive's default inheritance changes to match a member's explicit permissions, do they stay in the member table?</strong></summary>

Yes. Once a user has been explicitly shared on a drive, they remain in the member table regardless of changes to default inheritance.

</details>

<details>

<summary><strong>Can guests see drives in their sidebar?</strong></summary>

Yes. If a guest has access to any file or folder within a drive, they can see that drive in their sidebar for easy navigation.

</details>

<details>

<summary><strong>How do workspace admin permissions work?</strong></summary>

Workspace admins automatically become drive managers and can be downgraded to workspace members. They can modify default inheritance settings and manage all aspects of the workspace, including other admins (except the owner).

</details>

<details>

<summary><strong>What's required to transfer workspace ownership?</strong></summary>

The current owner must first promote the user they want to give ownership to as an admin. Then the owner must leave the workspace, at which point they will be prompted to transfer the ownership to an existing admin.

</details>

<details>

<summary><strong>Can guests be upgraded to workspace members?</strong></summary>

Yes. Users can progress from file/folder access (guest) to drive access (drive member) to workspace access (workspace member) in any order.

</details>

<details>

<summary><strong>What permissions do drive managers have?</strong></summary>

Drive managers are always workspace admins and have full control over drive contents and settings, including the ability to modify default inheritance settings.

</details>

<details>

<summary><strong>How does member table visibility work at different levels?</strong></summary>

The workspace level shows both members and guests. Drive level member tables only show users who have been explicitly granted permissions OUTSIDE from the default inheritance. This keeps the interface clean while making it easy to track custom permission assignments.

</details>

<details>

<summary><strong>Can workspace admins be added directly to drives?</strong></summary>

No. Since workspace admins automatically become drive managers on all drives, they cannot be explicitly invited to drives with different permission levels.

</details>

<details>

<summary><strong>What happens when sharing files/folders directly?</strong></summary>

When sharing files or folders, you must specify the permission level during the share action (similar to Google Drive). The recipient becomes a guest at both the workspace and drive level, and the drive becomes visible in their sidebar for easy access.

</details>

<details>

<summary><strong>What file and folder permission levels are available to guests?</strong></summary>

Guests can be assigned **Viewer**, **Downloader**, **Commenting**, **Editor**, or **Full Access**. Use **Downloader** when someone needs download access without broader edit rights.

</details>

<details>

<summary><strong>What is the Contractor role and how does it work?</strong></summary>

Contractors are workspace members with restricted permissions who do not automatically inherit drive access. Unlike regular members who receive access based on a drive's default inheritance settings, contractors must be explicitly invited to each drive or can be granted access to specific files and folders within drives. This allows secure, granular sharing where contractors only see the exact resources they need without visibility into the broader drive structure. Contractors are billed as workspace members and appear with a "CONTRACTOR" badge in the UI. This role is ideal for external collaborators who need member-level capabilities (like mounting drives) but should only access specific content on a case-by-case basis.

</details>


# Permissions Table

Shade's permission system operates across three levels: Workspaces, Drives, and Files/Folders. Permissions flow down from higher levels unless explicitly overridden at lower levels.

{% embed url="<https://youtu.be/6t_-b4qu908?si=z5v-0mlRE-ZAQqca>" %}

### Workspace-Level Roles

| Role        | Workspace Management                      | Drive Management                                                  | Drive Mounting | Create Drives | Billing Access | ShadeFS Access | Metadata Access |
| ----------- | ----------------------------------------- | ----------------------------------------------------------------- | -------------- | ------------- | -------------- | -------------- | --------------- |
| **Owner**   | Full control; can transfer ownership      | Full control over all drives                                      | ✓              | ✓             | Full access    | ✓              | ✓               |
| **Admin**   | Full control; manage members and settings | Full control over all drives; automatically becomes Drive Manager | ✓              | ✓             | Full access    | ✓              | ✓               |
| **Member**  | View workspace                            | Access determined by drive inheritance                            | ✓              | ✓             | No Access      | ✓              | ✓               |
| Contributor | View Workspace                            | Access determined by drive inheritance                            | ✓              | ✗             | No Access      | ✓              | ✓               |
| Contractor  | View Workspace                            | Access to specific drives/files/folders only                      | ✓              | ✗             | No access      | ✓              | ✓               |
| **Guest**   | No workspace access                       | Access to specific drives/files/folders only                      | ✗              | ✗             | No access      | ✗              | ✗               |

### Drive-Level Roles

| Role            | View Files | Download | Upload | Edit | Delete | Comment | Rename/Move | Drive Settings | Permission Management |
| --------------- | ---------- | -------- | ------ | ---- | ------ | ------- | ----------- | -------------- | --------------------- |
| **Admin**       | ✓          | ✓        | ✓      | ✓    | ✓      | ✓       | ✓           | ✓              | ✓                     |
| **Full Access** | ✓          | ✓        | ✓      | ✓    | ✓      | ✓       | ✓           | ✗              | ✗                     |
| **Edit**        | ✓          | ✓        | ✓      | ✓    | ✓      | ✓       | ✓           | ✗              | ✗                     |
| **Comment**     | ✓          | ✓        | ✗      | ✗    | ✗      | ✓       | ✗           | ✗              | ✗                     |
| **Download**    | ✓          | ✓        | ✗      | ✗    | ✗      | ✗       | ✗           | ✗              | ✗                     |
| **View**        | ✓          | ✗        | ✗      | ✗    | ✗      | ✗       | ✗           | ✗              | ✗                     |
| **None**        | ✗          | ✗        | ✗      | ✗    | ✗      | ✗       | ✗           | ✗              | ✗                     |

### Key Concepts

#### Workspace Members vs Guests

**Workspace Members** are users explicitly added to a workspace as admins or members. They can:

* Mount drives via ShadeFS
* Access metadata and AI features
* Receive automatic access based on drive inheritance settings
* Create new drives
* Appear on billing as a seat

**Guests** are users with access to specific files, folders, or drives without workspace-level permissions. They can:

* View, edit, comment, or delete based on their permission level
* Access resources only through the web/desktop application interface
* See drives in their sidebar if they have access to any contained files
* Do NOT count toward billing seat limits
* Cannot mount drives

#### Drive Inheritance

Each drive has a **default inheritance** setting that determines the base permission level for all workspace members. When a workspace member's permissions differ from the default, they appear in the drive's member table.

#### Automatic Role Assignment

* Workspace Admins automatically become Drive Managers on all drives
* Workspace Admins cannot be explicitly invited to drives with different permission levels
* The Owner must transfer ownership to an admin before leaving the workspace

#### Progressive Access

Users can be upgraded through permission levels:

1. Guest with file/folder access
2. Guest with drive access
3. Workspace member

### Common Scenarios

**External Collaborators**: Invite as guests at the drive, folder, or file level for specific project access

**Long-term Contractors**: Invite as workspace contractors for mount access to only specific projects and folders

**Client Reviews**: Share specific files or folders, making them guests with View or Comment permissions

**Team Members**: Add as workspace members with drive access determined by inheritance


# Designing Your Permission Hierarchy

A well-structured workspace is essential for efficient post-production collaboration. This guide will help you make informed decisions about permissions and access levels when inviting your team.

## Planning Your Workspace Structure

Before sending invitations, consider your team's workflow requirements and security needs. A thoughtful permissions structure will streamline collaboration and maintain content security.

### Key Considerations

Consider your team's workflow patterns, security requirements, and folder organization. Take time to establish your workspace structure before adding team members to ensure smooth collaboration from day one.

## Understanding Access Levels

### Workspace Members

Ideal for team members who need broad access across multiple projects. Workspace membership is appropriate for:

* Senior editors requiring access to multiple projects
* Post-production supervisors coordinating across teams
* Producers managing multiple workflows

These users can mount drives and navigate freely between projects based on their permission levels.

### Drive-Level Access

Perfect for project-specific teams. Consider drive-level access for:

* Colorists working on final cuts
* Sound designers focusing on specific assets
* Client review teams needing access to completed work

### File and Folder Access

Best for targeted collaboration with:

* Freelancers working on specific shots
* Clients reviewing individual sequences
* Temporary team members with limited scope

## Best Practices

### Permission Management

Start with restricted access and scale up permissions as needed. This approach is more secure than retroactively restricting access. Use **default inheritance** settings on drives strategically—set base-level permissions that apply to most users and explicitly upgrade access for specific team members who need it.

### Admin Selection

Choose workspace administrators carefully. Admin privileges grant complete control over workspace content and settings, including the ability to manage other users' access. Reserve admin status for trusted team members who understand your security requirements.

### Client Collaboration

When working with clients:

* Use guest access instead of workspace membership
* Remember that drive names are visible to anyone with file access
* Structure drive names professionally to maintain client-facing professionalism

## Security Considerations

Protecting sensitive content requires careful attention to permission levels:

* Limit workspace admin privileges to essential team members
* Utilize guest access for external collaborators
* Consider drive-level sharing for sensitive content management

## Important Notes

### Permission Inheritance

* Explicit drive invitations are required for custom permission levels
* Workspace admins automatically receive drive manager status
* Drive visibility extends to all users with file access
* Permission upgrades can be implemented progressively

## Additional Resources

For detailed information about fine-tuning permissions after your initial setup, consult our comprehensive permissions guide:

{% content-ref url="/pages/8C73p2MA9ly4XcKKZpck" %}
[Workspace and Drive Permissions](/sharing-and-collaboration/workspace-and-drive-permissions)
{% endcontent-ref %}


# Permission Inheritance Examples

### Scenario: Workspace Member + Drive Inheritance

**You**

* Role: **Workspace Member**
* Not a workspace admin
* You join a workspace that already has two drives

***

### Drive Setup (by an Admin)

#### Drive A: `Marketing Project`

* **Default inheritance for workspace members:** **Full Access**

#### Drive B: `Finance & Legal`

* **Default inheritance for workspace members:** **No Access**

***

### What You See When You Join the Workspace

#### Drive A — `Marketing Project`

Because the drive’s default inheritance is **Full Access**:

* The drive appears in your drive list
* You can open all folders and files
* You can:
  * Upload files
  * Rename, delete, and reorganize files
  * Manage file- and folder-level permissions
* You are **not** a Drive Manager
  * You cannot rename or delete the drive
  * You cannot manage drive-level permissions
  * You cannot manage metadata at the drive level

***

#### Drive B — `Finance & Legal`

Because the drive’s default inheritance is **No Access**:

* The drive does **not** appear in your drive list
* You cannot browse its folders or files
* You have zero visibility that its contents even exist

> In effect:
>
> **This drive is invisible to you unless someone explicitly adds you.**

***

### If an Admin Later Changes Something

#### Case 1: Admin explicitly adds you to Drive B as an Editor

* Drive B now appears in your drive list
* You can access all folders and files in that drive
* Your permissions are **Editor**, regardless of the default inheritance

***

#### Case 2: Admin changes Drive B’s default inheritance to “Viewer”

* You see the drive
* You can view/download files, but not edit or upload

### Scenario: Workspace Contractor

**You**

* Role: **Workspace Contractor**
* Same setup as before, two drives, one with “No Access”, and another with “Full Access” default inheritance

***

### What You See When You Join the Workspace

#### Both Drives Are Invisible:

Because contractors ignore default inheritance:

* The drives do **not** appear in your drive list
* You cannot browse their folders or files
* You have zero visibility that their contents even exist

***

### If an Admin Later Changes Something

#### Case 1: Admin explicitly adds you to Drive A as an Editor

* Drive A now appears in your drive list
* You can access all folders and files in that drive
* Your permissions are **Editor**, regardless of the default inheritance

***

#### Case 2: Admin adds you to a specific folder inside of Drive A

* You see the drive
* You can view and download files inside of that specific folder, and if you were to mount that drive you would only see that specific folder you were added to.
* If you were added to a child folder, you would be able to navigate to that folder via the parent folder, but you **would not** be able to see any folders that you were not explicitly added to.


# Inviting External Collaborators

This guide covers best practices for collaborating with external partners while maintaining security and workflow efficiency.

### Understanding External Access

External collaborators can be granted access at three distinct levels:

#### File/Folder Access

The most granular and secure approach for external collaboration. When you share specific files or folders, collaborators become **guests** at both the workspace and drive level. They'll see only what they need while maintaining a clean, professional experience.

This level is ideal for:

* Clients reviewing specific deliverables
* Freelancers working on individual assets
* External QA teams reviewing specific content
* Stakeholders who need access to presentation materials

#### Drive Access

When external collaborators need broader access to a project, drive-level permissions offer a balanced approach. These users remain **workspace guests** but gain structured access to entire projects. **Important: Drive guests cannot mount drives via ShadeFS** - they can only access content through the web application interface.

Optimal for:

* External post-production houses
* Agency partners handling multiple assets
* Long-term freelancers on specific projects
* Client teams needing access to full project scope

#### Workspace Membership

Reserved for trusted external partners deeply integrated into your workflow. While possible, we recommend carefully considering security implications before granting this level of access.

### Security Best Practices

#### Permission Management

* Start restrictive and expand access as needed
* Use **guest access** as your default for external collaboration
* Remember that drive names are visible to anyone with file access
* Set clear **default inheritance** levels on drives to prevent accidental exposure

#### Access Control

External collaborators can progress through permission levels as needed:

1. Start with file/folder access
2. Upgrade to drive access if broader scope is required
3. Convert to workspace membership only when necessary

This progressive approach ensures appropriate access levels while maintaining security.

### Practical Considerations

#### Visibility and Navigation

External guests can see drives in their sidebar when they have access to any contained files. Consider this when:

* Naming drives and folders
* Organizing content
* Planning project structure

#### Permission Inheritance

* Drive **default inheritance** settings don't affect external guests
* Explicit permissions must be set when sharing
* Access can be modified or revoked at any time
* Changes to higher-level permissions propagate downward

### Client Collaboration Tips

When working with clients:

* Share specific files/folders instead of entire drives when possible
* Use standardized, professional drive names
* Consider creating dedicated client-facing drives
* Set clear permission levels during initial sharing

### Common Scenarios

#### Freelancer Onboarding

Start with specific file access and scale up based on project needs. This maintains security while allowing flexibility as the relationship develops.

#### Client Review Process

Share individual deliverables rather than entire project drives. This keeps the focus on relevant content and simplifies the review process.

#### Agency Partnerships

Consider drive-level access with specific permission sets based on project requirements. This balances efficiency with security.

### Important Reminders

* External guests retain drive visibility for any shared content
* Permission upgrades can be implemented progressively
* Access can be revoked or modified at any time
* Workspace admins can audit access levels
* **Drive guests cannot mount drives - only workspace members and contractors can use ShadeFS**

### Additional Resources

For more detailed information about permission structures and advanced collaboration features, consult our comprehensive permissions guide:

{% content-ref url="/pages/8C73p2MA9ly4XcKKZpck" %}
[Workspace and Drive Permissions](/sharing-and-collaboration/workspace-and-drive-permissions)
{% endcontent-ref %}


# Published Links

Published links are great for inviting external collaborators that need temporary access to a folder or file.

You can create a link from a preset permission level, or build a custom link with individual toggles.

### Preset permission levels

Published links support these preset levels:

* **Viewing**: View the asset
* **Downloading**: View and download the asset
* **Commenting**: Downloading plus commenting
* **Editing**: Commenting plus uploading, renaming, and deletion
* **Full Access**: Editing plus sharing with others

### Custom link permissions

Custom links let you enable specific capabilities:

* Commenting
* Downloading
* Viewing Metadata
* Editing Metadata
* Uploading

<figure><img src="/files/gZg6tlZs8xSf52QmBPO6" alt=""><figcaption></figcaption></figure>

To create a published link:

* Right click on any asset or folder and click **Share** (or click on the Share button on the top right of the screen)
* Choose your published link preset, or make your own using the **Create custom link** button.
* Choose the permissions you would like to assign
* Optionally assign a password, and expiration date.
* Click the **Create link** button on the top right

Now you can copy this link to your clipboard and share it via the button on the right hand side.

The permissions for this link can always be modified later. Changes apply to anyone using that link.

You can also keep track of all of a drive’s shared links via the **Shared Links** section of the drive on the left hand side.

Published links support analytics, so you can review link activity after sharing.


# Sharing Folders and Files

Sharing is just as easy as right clicking on any file or folder and sharing to any email. You can also publish a link to any folder or file.

Published links support analytics, so you can review link activity after sharing.

Published links can also be protected with passwords, expiration dates, and view limits.

### File/Folder Access

The most granular and secure approach for external collaboration. When you share specific files or folders, collaborators become **guests** at both the workspace and drive level. They'll see only what they need while maintaining a clean, professional experience.

This level is ideal for:

* Clients reviewing specific deliverables
* Freelancers working on individual assets
* External QA teams reviewing specific content
* Stakeholders who need access to presentation materials<br>

{% embed url="<https://youtu.be/zLlWyAg_A5Y?si=nAbfbguy2SPKTjyQ>" %}


# Creating Asset Collections

How to create, manage, and share collection with Shade.

## What Are Collections?

Collections are a way to create a virtual grouping of your assets outside of your drive structure. They provide a flexible method to organize and share your work without altering your primary file organization. With collections, you can cleanly deliver assets to your internal team, key stakeholders, or clients in a branded manner, tailored to the needs of your audience.

<figure><img src="/files/HxdgS7bpw2N02AewoYhF" alt=""><figcaption></figcaption></figure>

## Creating a Collection

There are a few ways to create collections in Shade:

### From the Asset Page

1. Navigate to the asset page where your files are displayed
2. Select the assets you want to add to a collection
3. Right click to reveal the dropdown menu
4. You can either:
   * Create a new collection from the dropdown
   * Add the selected assets to an existing collection

### Create a new Collection from the Sidebar

You can also view and manage existing collections or create a new collection directly from the left sidebar:

1. Find your drive in the left sidebar
2. Click on your drive name
3. Look for the "Collections" option under your drive
4. Click the "+" button to create a new collection

### Duplicate an existing Collection from the Sidebar

Duplicate an existing Collection if you want to easily reuse the same set of assets, styling, or permissions.

1. Find your drive in the left sidebar
2. Click on your drive name
3. Look for the "Collections" option under your drive
4. Right click the Collection you’d like to duplicate
5. Choose **Duplicate**

## Customizing a Collection

Once you have added assets to an existing collection or created a new collection, you can manage the collection features by revealing the details on the right sidebar.

### Permissions and Access

* Link visibility
  * Link visibility enabled - The collection can be viewed by any external recipient that has the link, in addition to any user that has direct access to the drive as a drive member or workspace member
  * Link visibility disabled - The collection is only visible to users who have direct access to the drive as a drive member or workspace member
* Allow (or limit) access to:
  * Download included assets
  * Comment on including assets
  * View asset details and metadata
    * View only the desired metadata fields
    * Edit metadata fields (like applying status labels, tags, ratings, or similar)

**Note:** These settings are disabled by default for security and must be explicitly enabled.

### Layout Customization

* Layout - How media fills a given asset card (i.e Fit or Fill)
* Display - The presentation of media on the collection (i.e Grid, List, or Tile)
* Card size - Small, Medium, or Large
* Rounded corners - toggle of asset card corners are rounded or 90 degree angles

### Security + Watermarking

* Link Expiration - Set when the link visibility auto-deactivates
* Password - Create a simple password that recipients must know to access the collection
* Watermarking - **Session-based Watermarking** will display the viewers name, email address, and IP address as an overlay on the video content, where as **Text-based Watermarking** let’s you customize the text position, provide your own custom text, and chose the font size

### Branding

You can further stylize the collection page with your branding:

* Add your logo
* Change the background image
* Customize the icon at the top of the collection page

## FAQ

<details>

<summary>Can I use collections to version my assets?</summary>

Yes. You can easily create a metadata attribute called "Version" and add a version label to each of the assets in your collection. This provides a simple way to track iterations of your work.

</details>

<details>

<summary>How do I share a collection?</summary>

Anyone with the published collection link can access the collection. Simply toggle the link on in the right sidebar and share the URL with your intended viewers.

</details>

<details>

<summary>How do I find collections that I have already created?</summary>

All collections you or other team members have created under a drive can be found by:

1. Clicking on the drive name on the left sidebar
2. Clicking "Collections" under the drive This will display all collections associated with that particular drive.

</details>

<details>

<summary>Can an asset live in multiple collections simultaneously?</summary>

Yes, assets can exist in multiple collections at the same time. This allows you to organize the same assets in different ways for different purposes or audiences without duplication.

</details>


# Commenting on Assets

A comprehensive guide to Shade's commenting system, detailing how to leave time-stamped, anchored, and threaded comments to streamline collaboration and feedback for creative teams.

## Introduction

Shade simplifies commenting, review, and client feedback by integrating these tools into a single, centralized hub. Whether you're collaborating internally or working with external clients, Shade provides time-stamped comments, range-based comments, threaded discussions, and emoji reactions to enhance communication and speed up review cycles.

This guide will walk you through how to leave, manage, and optimize comments in Shade to streamline your creative workflow.

## Leaving Comments in Shade

### Time-stamped comments

When you need to provide feedback on a precise moment in a video or audio-only file, time-stamped comments are invaluable. To leave a time-stamped comment:

1. Pause the video or audio at the desired frame
2. Navigate between frames using the '.' and ',' keys for fine-grained control, or click and drag the playhead to the desired spot
3. Enter your comment in the comment box on the right of the player
4. For video, provide an on-screen annotation to call attention to what you’re commenting on with the pencil icon
   * Choose your annotation style (arrow, line, box, or freehand)
   * Choose your color (red, yellow, or green)
   * Click and drag on the video or image frame to leave your annotation
5. Include relevant attachments with the Paperclip icon (supplemental files or image references for example)
6. Choose whether the comment should be Public or Internal
   * Public comments will be viewable to anyone with a link to the asset
   * Internal comments will only be viewable to internal workspace members who have access to the asset
7. Click Send (the purple arrow) or press the return key - the comment will be linked to the exact moment in the timeline for easy reference

### Anchored Comments

For even more precise feedback, you can place comments directly on the video canvas:

1. Pause the video on the frame you would like to leave a comment
2. Click the anchor pin on the bottom of the video player, or active with Shift + C
3. Move your pointer directly to the video canvas and you’ll see its now the purple Anchor icon. Point and click on the exact thing you want to comment on
4. Write and submit the comment as you would normally

Anchored comments also include the ability to annotate, add attachments, and set as Public or Internal

### Range-based Comments

Range-based comments are handy when you want to leave feedback about something that transpires over time, rather than on a specific frame. This is particularly relevant to on screen graphic animations over time, title durations, noting a moment of interest from a larger clip, and grabbing a key quote somebody said. Range-based comments work on any time-based media (i.e Video or Audio).

There are a few ways to leave a range-based comment:

* Shift-click the playhead to reveal handles, then drag the handles to set your desired range
* Mark in and out points with additional precession using your I and O keys
* Open the Transcript panel, highlight a desired text range to create a corresponding range-selection, and leave your desired comment

Range-based comments also include the ability to annotate, add attachments, and set as Public or Internal

### General Comments Without a Timecode

If your feedback doesn't need to be linked to a specific frame or timestamp, you can leave a general comment:

1. Uncheck the timestamp clock next to the comment box
2. Type your feedback
3. Click send - your comment will be visible in the discussion but won't be linked to a specific frame

### Commenting on Static File Types (i.e. Photo and PDF)

Shade also allows for commenting on [supported static files](https://www.notion.so/9e027b9bf534477d9abd6956703def97?pvs=21) like jpgs, pngs, pdfs, and more.

Many of the commenting functions mentioned above work on these file types, and will operate like a general comment without timecode. You can:

* Leave standard or anchored comments
* Include mark-ups and annotations
* Add attachments
* Make comments Public or Internal

PDF’s offer additional comment functionality with Text Annotation.

* Enable Text Annotation to highlight detected text within the PDF
* Leave comments on highlighted text
* Apply one of our provided labels for additional context:
  * Highlight
  * Insert
  * Remove
  * Replace

### Notify Other Workspace Members

Shade gives you the ability to notify teammates through a comment via the @ key:

* As you write a comment, start typing @ and the team member's name to reference them in your comment
* The team member will receive an email notification bringing them to the comment you tagged them in

## Navigating and Interacting with Comments

### Threaded Replies for Contextual Discussions

Instead of creating separate comments on the same issue, threaded replies allow for focused discussions within a comment, making them ideal for team discussions, clarifying feedback, and addressing notes efficiently.

* Click Reply on an existing comment to add context or provide further clarification
* Keep all feedback organized and relevant by responding directly within the comment thread

### Using Emoji Reactions for Quick Acknowledgments

When a detailed response isn't needed, emoji reactions provide a quick way to engage with feedback:

* Click the reaction button below a comment
* Choose from 👍, ✅, 🎉, or other emojis to approve, confirm, or celebrate progress

### Marking Comments as Complete

To track progress, Shade allows users to mark comments as complete when feedback has been addressed:

* Comments can be marked by selecting the check icon on the comment
* This helps teams track which items have been resolved and which still need attention

### Filter and Sort Comments

Depending on the media type, you’ll have a variety of filter and sort options. Use filtering hide or show the most relevant comments, and sort them in the desired order.

Filter comments by:

* Timestamps (Time-based media only)
* Annotations
* Anchored
* Mentions & Reactions
* Attachments
* Replies
* Public
* Internal
* Resolved
* Unresolved

Sort comments by:

* Timestamp (Time-based media only)
* Page order (PDF’s only)
* Oldest to Newest
* Newest to Oldest

### Editing & Deleting Comments

If a comment needs to be revised or removed:

1. Hit the … on the comment to reveal the dropdown
2. Choose to:
   * **Edit** the comment to update feedback
   * **Delete** the comment if it's no longer relevant

## Notifications

Shade allows you to receive notifications around various activities, across varying surfaces.

### Setting Up Notification Preferences

#### Notification surfaces

Shades notification system supports notifications across:

* Our web and native desktop apps
* Your desktop with OS-level desktop notifications
* Email
* Slack

#### Activities

Per surface, you can dial in which activities you do or don’t get notified about, including:

* General Comments
* Mentions
* Comment Replies
* Comment Resolves
* Workspace Invitations (only available on Slack)

### Interacting with In-app Notifications

Notifications are accessed at the top of the left-nav. Click to expand the notifications panel and view, All, Unread, or Read

* Click on a notification to go directly the asset and corresponding comment
* Click the 3-dot menu on any notification to
  * Mark as Read or Unread
  * Archive (archiving permanently deletes the notification)

### Setting up Slack notifications

#### Connecting Shade to your Slack workspace

Within your Shade account:

1. Go to Settings > My Workspace > General > Slack Integration
2. Click **Connect to Slack**
3. Authenticate and choose the desired workspace
4. Choose which channels should receive notifications from across your entire workspace

#### Configure Drive-level Slack notification preference

You can configure more granular notification preferences on a Drive-by-drive basis, and point notifications from specific drives to desired Slack. Within Settings:

1. Go to Drives > click to expand the desired Drive > Slack Notifications
2. Choose the Slack channel(s) that should receive notifications from activities in the current Drive
3. Choose the Drive activities that will trigger notifications to the configured Slack channels.

## AirPlay support

From our web or native desktop app, you can now AirPlay Video and Audio files to compatible AirPlay devices on your network.

1. Open the Video or Audio file you’d like to AirPlay
2. On the bottom right of the asset player, click the AirPlay icon
3. Select the desired device where you’d like to AirPlay content
4. Enjoy your content on the device you chose

## Visual guides

Visual guides allow you to preview your videos files at varying crop aspect ratios when your outputting to various screens or platforms. Visual guides also include title and action safe guides to better help you frame your content.

1. Open your desired video file
2. Click the gear icon in the bottom right corner of the player
3. Click Guides
4. Choose the desired aspect ratio based on the screen or platform your creating for.
5. Optionally Hide or Show the mask to obscure the content that falls outside of the chosen aspect ratio

We offer a guides in a variety of aspect rations based on the most common screens and surfaces our customer are creating for. Submit a feature request to our team if there are additional aspect ratios you’d like to see!

## Managing Access & Collaboration

Shade's granular permission controls ensure that the right people have access to the right content. Files, folders, and collections can be shared with commenting access.

Users that are accessing a **published** link with commenting permissions will not have to create a Shade account to leave feedback. This makes it especially convenient when working with external clients or stakeholders who may not be regular Shade users.

## Final Thoughts

Shade unifies commenting, review, and media collaboration into one seamless platform. With time-stamped comments, replies, emoji reactions, and granular permissions, teams can work more efficiently - whether internally or with external collaborators.


# Working with Clients: Best Practices

We know client communication is important. Watch these quick videos to learn simple best practices for sharing and collaborating with clients.

{% embed url="<https://youtu.be/hewjtuw1KnI?si=jKLhYGgtKxqaBe7w>" %}

{% embed url="<https://youtu.be/UIKMA5KS6Gg?si=_5jqw0h49pjVSmrQ>" %}

{% embed url="<https://youtu.be/EmiC1cNJtpk?si=Ch60I7i9RZ2Zbmqz>" %}

{% embed url="<https://youtu.be/G7lV_P_D7aI?si=ppQqeG3rTcbTt2F5>" %}


# Introduction to ShadeFS

## **Overview**

ShadeFS is a cloud drive mounting solution that completely changes how you interact with cloud-stored media files. Unlike traditional cloud storage solutions that require complete file downloads before access (ahem Dropbox), ShadeFS streams the segments you need in real-time, similar to how YouTube delivers video content. This approach give you immediate access to your media while optimizing bandwidth usage.

## **Key Features**

* ShadeFS turns your cloud drive into a local folder accessible by default via the “/Volumes” folder
* When you mount a drive, it appears in your local file system just like a physical hard drive, but with the added advantage of intelligent streaming and caching
* The system automatically synchronizes file trees across all users, ensuring everyone on your team works with the same content structure regardless of their location.
* Uploaded files are automatically pushed through our proxy generation and AI analysis pipelines

## **System Requirements**

ShadeFS has a few requirements to get working optimally on your machine.

* For working with 4K video content, we recommend a minimum internet speed of 500Mbps down
* Users with lower bandwidth should consider working with proxy files or sub-4K resolution content
* Your device should also have sufficient storage space for the cache, with a minimum of 10GB for basic operations

## **Getting Started**

Once you have the desktop app downloaded and opened, you can mount any drive by navigating to it in the left panel, clicking the "..." menu, and selecting "Mount Drive." The drive will appear in your local file explorer, whether you're using Windows, macOS, or Linux.

{% embed url="<https://youtu.be/Cl3A47wWuxY?si=BR8w6EY8fmBrkYZN>" %}

## **Cache Configuration**

ShadeFS uses a caching system to optimize performance for your media files. By default, the system creates a cache of 26GB in the **.shade** folder located in your user root directory. However, you can customize both the cache location and size to better suit your needs.

[Managing the ShadeFS Cache](https://academy.shade.inc/shadefs/managing-the-shadefs-cache)

## **Cache Directory**

To modify your cache directory, navigate to Settings/Preferences in the application. Here you can select any folder on your computer or an external drive as your cache location. We particularly recommend using a high-speed external SSD, such as a Samsung T7, for optimal performance.

## **ShadeFS Usage Guidelines**

## **Permissions**

ShadeFS access and mounting capabilities is restricted to workspace contractors, members, and administrators. When multiple users mount the same drive, they all see an identical file tree, which facilitates seamless collaboration across remote teams.

## **Uploads**

For large-scale uploads exceeding 1000 assets or 100GB, we recommend using the webapp or desktop application rather than uploading through the mounted drive. We have optimized uploading through the app interface for large files. Any upload method you choose will automatically make content visible in both the webapp and desktop application, triggering our automatic proxy generation and AI processing systems.

Files can be moved between drives by first mounting multiple drives and then moving files through your computer's file explorer between the drives

## **Offline Access**

ShadeFS provides offline access capabilities through **pinning**. To access specific files or folders with weak internet connection (or none at all), simply right-click on the files/folders in the app and select "Pin to Cache." This action downloads a complete copy of the selected content to your local cache, making them fully accessible even if you are offline. You can view files that you have pinned via the **Pinned Items** page.

See more at [Pinning Files Offline](https://academy.shade.inc/shadefs/pinning-files-offline).

## **Performance Optimization**

There’s a few ways to maximize the performance for ShadeFS.

* Use an external SSD for cache storage to significantly improve access speeds and overall system responsiveness
* We recommend configuring your cache size based on your typical working set to ensure frequently accessed files remain readily available
* While ShadeFS is designed to work efficiently with available bandwidth, try to maintain a stable internet connection while you use the mount
* For users working with high-resolution content on limited bandwidth, we recommend making proxy files

## **Integration with Shade Ecosystem**

Unlike other file streaming tools, ShadeFS is deeply integrated with the webapp and desktop app. When you upload files through a mounted drive, they are automatically indexed in the Shade system, which are immediately visible across web and desktop applications.


# Managing the ShadeFS Cache

## **Overview**

ShadeFS uses a local cache system to enable smooth, efficient access to your cloud-stored media files. Understand how to configure and manage this cache to optimize your workflow performance and manage your local storage.

## **Cache Basics**

By default, ShadeFS allocates 26GB of cache space in the `.shade` folder within your computer's user root directory. This cache serves as a temporary storage location for streamed media segments so your file explorer and NLE’s have instant access to your media.

## **Location Management**

You can change where ShadeFS stores its cache to a folder on your machine, or an external device:

1. Open the Settings/Preferences menu in your Shade application
2. Navigate to the cache settings section
3. Select your preferred cache directory

For optimal performance, we recommend using a high-speed external SSD (such as a Samsung T7) as your cache location. This config will be higher performance and also keep your system drive free for other operations.

Your external hard drive cannot be formatted with exFAT as we use sparse files for cache files. Please format your drive for APFS or NTFS

<figure><img src="/files/qeEG4VBSwOfM5fnt4Hxq" alt=""><figcaption></figcaption></figure>

## **Cache Size**

Cache size can be changed through the "Mount Drives" panel, or via **Settings > Preferences**. The default 26GB cache is sufficient for basic operations, but you can increase this up to the available free space on your computer or whatever your cache directory is set to. Consider your typical workflow project size and available storage when adjusting these settings. The cache size is shared between all drives. If you have multiple drives mounted at the same time, they will all share the same cache space.

<figure><img src="/files/DUKhU7bnoKsUIlHdf8om" alt=""><figcaption></figcaption></figure>

## **Offline Access**

For situations where you need guaranteed access to specific files without internet access, you can pin files offline. When you pin a file or folder, it downloads a complete copy **outside** your cache, making it available offline. This means that pinning does not consider the amount of storage your machine has. If you try to pin more storage than you have available, then your machine will run out of space and you will experience problems. To pin content:

1. Navigate to the desired file or folder in the Shade application
2. Right-click the item
3. Select "Pin to Cache"

More info here: [Pinning Files Offline](/shadefs/pinning-files-offline)

## **Performance Considerations**

Your cache configuration directly impacts system performance. For the best experience:

* Use a high-speed storage device for your cache location, for suggested hardware check out [Choosing an External SSD for Shade Cache](https://academy.shade.inc/shadefs/choosing-an-external-ssd-for-shade-cache)
* Allocate sufficient cache size for your typical working set
* Monitor available space on your cache drive
* Consider pinning frequently-used files for consistent access

Remember that while larger cache sizes can improve performance with frequently accessed files, they also require more storage space on your local system.


# Pinning Files Offline

## How Pinning Works

Unlike the standard cache system, pinned files exist in a separate storage space that isn't subject to cache size limitations or eviction rules. When you pin content, ShadeFS creates a complete local copy that persists until you explicitly unpin it. **This means you can pin as much content as your local storage can accommodate, regardless of your configured cache size.**

{% embed url="<https://youtu.be/apDcYPUC7tw?si=LB3hSQr8zL2Ow_Md>" %}

<figure><img src="/files/epJ8KnPfi9czWwBqm1pT" alt=""><figcaption></figcaption></figure>

## Working Offline

Pinned files remain fully accessible even offline. Any changes you make to pinned files while offline are marked as "dirty" in the system, indicating they need to be synchronized with the cloud. These files are protected from cache eviction until they can be successfully synchronized to ensure no work is lost when you come back online.

When reconnecting or restarting ShadeFS, the system automatically identifies any changed files and synchronizes them with the Shade cloud. Currently, in cases of conflicting changes between users, the most recent modification takes precedence as the source of truth.

## Pinning Hierarchy

ShadeFS handles pinning with a hierarchy system. When working with nested folders:

* Pinning a parent folder automatically includes all its contents
* If both an outer folder and an inner folder are pinned, unpinning the inner folder won't have any effect as the outer folder's pin status takes precedence
* You can selectively pin specific files or folders within an unpinned parent folder

## Flexible Usage

A key advantage of ShadeFS pinning is its flexibility:

* You can pin files without mounting the drive first
* There's no limit to how much content you can pin (beyond your available storage)
* Pinned status persists across system restarts and reconnections
* You can continue to work with pinned files even when offline

## Managing Pinned Content

{% hint style="info" %}
Pinned files will save all files that you pin fully offline, avoiding your cache limits that you set, which are used for ephemeral and standard storage. This means that it is possible for you to pin **more than what you have available left on your cache drive depending on what you're trying to pin.**
{% endhint %}

To pin files or folders:

1. Open the Shade application
2. Navigate to the desired content
3. Right-click and select "Pin to Cache"

To unpin content:

1. Right-click the pinned item
2. Select "Unpin"

To view all pinned files or folders, you can navigate to the **Pinned Items** page, which you can access at the drive or the workspace level.


# Choosing an External SSD for Shade Cache

Choosing an external SSD can help improve your performance with Shade

If you're considering an upgrade or purchasing a new Solid State Drive (SSD) for caching, choosing the right one is crucial for ensuring smooth performance with ShadeFS. Depending on your workload there a few recommended options.

{% hint style="info" %}
Note: There is not necessarily a need to purchase these hard drives below. A typical Sandisk Extreme or T7 will do just fine and is what most of the Shade team uses on a regular basis. However, if you wish to maximize speed and performance of ShadeFS for caching and heavy workloads, we recommend the items below.
{% endhint %}

***

### **Why Choosing the Right Cache Drive Matters**

Shade intelligently caches the files and bytes that you need as you continue to access data from the cloud in order to optimize workloads and network usage, ensuring a lag-free experience. Unlike NFS and other network file systems, data is streamed from the cloud and cached locally. Shade also supports setting your cache to an external hard drive location.

As a result, the hardware used for cache storage directly impacts performance, making it essential to select a drive that meets workload demands.

Since our caching system involves frequent random reads and writes, Hard Disk Drives (HDDs) are not suitable. Instead, high-speed Solid State Drives (SSDs) significantly enhance performance.

***

### **Recommended Cache Drives for Most Workloads**

Most workloads prioritize fast read speeds and burst write speeds, making these SSDs ideal:

1. [**Samsung 990 PRO PCIe 4.0 NVMe SSD 4TB**](https://www.samsung.com/us/computing/memory-storage/solid-state-drives/990-pro-pcie-4-0-nvme-ssd-4tb-mz-v9p4t0b-am/) - Available in 4TB, 2TB, or 1TB
2. [**WD Black SN850X NVMe SSD 2TB**](https://www.westerndigital.com/products/internal-drives/wd-black-sn850x-nvme-ssd#WDS200T2X0E) - Great for gaming and high-performance workloads
3. [**Crucial T700 PCIe Gen5 NVMe SSD 2TB**](https://www.crucial.com/ssd/t700/ct2000t700ssd3) - Ultra-fast Gen5 speeds, ideal for future-proofing
4. [**Sabrent Rocket 4 Plus 4TB NVMe SSD**](https://www.sabrent.com/product/sb-rkt4p-4tb/) - High-capacity and reliable performance
5. [**Acasis 40Gbps M.2 NVMe SSD Enclosure**](https://www.acasis.com/products/acasis-usb4-0-mobile-m-2-nvme-enclosure-40gbps-compatible-with-typec-thunderbolt-3-interface-solid-state-nvme-ssd-universal-tools?variant=43694516601061) - Ensures maximum external connectivity speeds

In all cases, opting for a larger cache drive is recommended. Choose the highest capacity possible for better performance as this allows you to cache more files and thus reduce the round trips required to go to the cloud.

***

### **Recommended Cache Drives for Sustained Write Workloads**

For workloads that require consistent high-speed writes (such as video rendering and large data transfers), these SSDs are best:

#### **Recommended 1TB Drives:**

1. [**Samsung 970 PRO NVMe M.2 SSD 1TB**](https://www.samsung.com/us/computing/memory-storage/solid-state-drives/ssd-970-pro-nvme-m2-1tb-mz-v7p1t0bw/) - Optimized for sustained write speeds
2. [**WD Red SN700 NVMe SSD 1TB**](https://www.westerndigital.com/products/internal-drives/wd-red-sn700-nvme-ssd#WDS100T1R0C) - Designed for NAS and continuous workloads

#### **Recommended 2TB Drives:**

1. [**Tropic Colour 2TB Space Shuttle SSD**](https://tropiccolour.com/products/tc-space-shuttle) - Portable and optimized for creative professionals
2. [**Seagate FireCuda 530 NVMe SSD 2TB**](https://www.seagate.com/products/gaming-drives/pc-gaming/firecuda-530-ssd/) - High endurance and exceptional write speeds

***

### **Understanding Sustained Write Workloads**

A sustained write workload involves continuous data writes exceeding **1 GBps (8Gbps)** without idle time. If this describes your workflow, selecting an SSD designed for sustained write speeds is crucial.

#### **Examples of Sustained Write Workloads:**

* **Copying 100GB+ of assets from a camera card to a Shade Drive**
  * Faster sustained write speeds reduce copying time since speed is limited by how fast data is written.
* **Rendering large video assets where the output exceeds 1 GBps (8Gbps)**
  * High write speeds prevent bottlenecks during rendering.

If your workload has idle moments during the writing process, it does **not** classify as a "sustained write" workload. In such cases, a high-performance SSD with excellent burst speeds is more beneficial.


# Understanding Internet Speeds and ShadeFS Storage

How internet speed relates to your media bitrate

In order to have a smooth experience editing with ShadeFS, it's important to understand the relationship between your internet speed and the bitrate of the media you are accessing. The higher the bitrate, the more bandwidth will be required.

***

### **Bitrate vs. Internet Speed**

#### **1. What is Bitrate?**

Bitrate refers to the amount of data processed per unit of time in a media file, usually measured in megabits per second (Mbps). It determines the quality and clarity of video playback.

#### **2. What is Internet Speed?**

Internet speed dictates how quickly data can be transferred from the internet to your device, also measured in Mbps. For smooth playback, your internet speed should be equal to or greater than the bitrate of the media file.

If the bitrate surpasses your internet speed, buffering, lag, or interruptions may occur.

{% hint style="info" %}
ShadeFS will intelligently cache files and parts of your media as data is accessed, you can see more in our [Introduction to ShadeFS](/shadefs/introduction-to-shadefs) and [Managing the ShadeFS Cache](/shadefs/managing-the-shadefs-cache), in poor bandwidth conditions, we highly recommend [Pinning Files Offline](/shadefs/pinning-files-offline)
{% endhint %}

***

### **Recommendations for Smooth Playback**

1. **Match or Exceed Bitrate:** Your internet speed should be at least equal to the media’s bitrate for uninterrupted playback.

   *Example:* A 500 Mbps video requires at least a 500 Mbps internet connection.
2. **Account for Other Activities:** Streaming, downloads, and other devices can reduce available bandwidth, so factor these into your internet speed calculations.
3. **Use Wired Over Wireless:** A wired connection provides faster and more stable speeds compared to Wi-Fi, reducing latency and buffering.
4. **Check Your Speed:** Run an [internet speed test](https://www.speedtest.net/) to determine your real-time bandwidth.

***

### **Calculating Your Video’s Bitrate**

To estimate the bitrate of a video file, consider these key factors:

* **Resolution:** Common formats include:
  * 1080p (Full HD) - 1920x1080
  * 4K (Ultra HD) - 3840x2160
  * 8K (Ultra HD) - 7680x4320
* **Compression Ratio:** Determines how much the file has been compressed (e.g., 10:1 means the file size is reduced to one-tenth of its original size).
* **File Format:** Codec or compression method used (e.g., H.264, ProRes, BRAW).

{% hint style="info" %}
**Editing Tip:** If playing back a video at 50% quality in Premiere Pro, halve the required bitrate for smoother playback.
{% endhint %}

***

### **Example Bitrates and Recommended Internet Speeds**

Here are common bitrates on resolutions

| **Resolution** | **Typical Bitrate (Mbps)** | **Recommended Internet Speed (Mbps)** |
| -------------- | -------------------------- | ------------------------------------- |
| 1080p (H.264)  | 8 - 15 Mbps                | 25+ Mbps                              |
| 1080p (ProRes) | 100 - 300 Mbps             | 100+ Mbps                             |
| 4K (H.264)     | 35 - 100 Mbps              | 100+ Mbps                             |
| 4K (ProRes)    | 500 - 1500 Mbps            | 1 Gbps+                               |
| 8K (H.264)     | 80 - 200 Mbps              | 200+ Mbps                             |
| 8K (ProRes)    | 2000 - 5000+ Mbps          | 5 Gbps+                               |

Here are common bitrates based on common cameras with maximum specs:&#x20;

| **Camera Model**                   | **Resolution** | **Typical Bitrate (Mbps)** | **Recommended Internet Speed (Mbps)** |
| ---------------------------------- | -------------- | -------------------------- | ------------------------------------- |
| Sony FX3 / FX6 / FX9               | 4K XAVC-I      | 300 - 600 Mbps             | 1 Gbps+                               |
| Blackmagic Pocket 4K / 6K / 6K Pro | 4K / 6K BRAW   | 500 - 2700 Mbps            | 3 Gbps+                               |
| Fujifilm X-H2S / X-T5              | 4K H.265       | 200 - 400 Mbps             | 500+ Mbps                             |
| Canon EOS R5 / C70                 | 8K RAW         | 2600 - 5400 Mbps           | 5 Gbps+                               |
| Canon EOS R6 Mark II               | 4K H.264       | 100 - 170 Mbps             | 300+ Mbps                             |

If you are using cloud storage, latency, jitter, and the region that you have chosen for your cloud storage may also impact performance. The farther away you are from your region selected, the slower the playback may be.&#x20;

A stable, low-latency connection improves playback quality. So, we recommend you set up a wired connection when doing hard editing especially on non-proxied assets.&#x20;

***

### **Final Thoughts**

* **Ensure your internet speed matches or exceeds media bitrate.**
* **Utilize wired connections for best performance.**
* **Leverage Shade's pinning feature for low-bandwidth conditions.**


# ShadeFS Troubleshooting Guide

### Performance Issues

#### 1. Optimize Cache Configuration

**Problem:** Slow file access and playback performance

**Solutions:**

* **Use an external SSD** - Connect a dedicated SSD (Samsung T7 recommended) for cache storage instead of using internal storage
* **Increase cache size** - Default 10GB may be insufficient for larger projects. Allocate based on your typical working set size. We recommend having a cache size at least as large as the largest file you are working with to ensure there won’t be any continual evictions/redownload
* **Check drive format** - Ensure cache drive is formatted as APFS (Mac) or NTFS (Windows). Do not use exFAT

#### 2. Check Network Requirements

**Problem:** Stuttering playback or slow file loading

**Solutions:**

* **Verify internet speed** - Minimum 500Mbps download recommended for 4K content
* **Use wired connection** - Switch from WiFi to Ethernet when editing non-proxied assets
* **Test connection stability** - Ensure no packet loss or intermittent drops during active sessions

#### 3. Use Proxy Workflows

**Problem:** High-resolution content performs poorly

**Solutions:**

* **Enable proxy files** - Work with proxies instead of original high-res files, especially for 4K+ content
* **Ideal for limited bandwidth** - Significantly improves performance if under 500Mbps connection

#### 4. Manage Pinning and Mount Usage

**Problem:** Pinning fails or slows down during active work

**Solutions:**

* **Avoid simultaneous operations** - Don't pin large amounts of data while actively accessing files through the mount
* **Separate workflows** - Complete pinning operations before intensive mount usage
* **Note:** Recent updates have fixed bugs where pinning could fail on network retry attempts

#### 5. Monitor Cache Drive Space

**Problem:** Unexpected performance degradation

**Solutions:**

* **Check free space** - Ensure sufficient available space on your cache drive
* **Right-size allocation** - Match cache size to your actual working set needs

### Getting Additional Help

If issues persist after trying these steps:

1. Go to Settings in the ShadeFS app
2. Export “ShadeFS Logs”
3. Share logs with support for investigation


# Default Shortcuts

Shortcuts can be changed from your workspace settings page. Here are the default configurations.

## On Any Page

These shortcuts work on any page in the Shade desktop app

* **`cmd/ctrl + k`**  opens the search for your global drive
* **`s`** opens the share panel

## On a Drive Page

These shortcuts work when you are within the drive view of your files.

* **`spacebar`**  opens a modal for the current asset, or opens an information modal for the current folder&#x20;
* **`cmd/ctrl + f`**  opens the search for your current folder
* **`cmd/ctrl + s`** toggles the left panel
* **`left arrow`** moves highlight the asset left
* **`right arrow`**  moves highlight the asset right
* **`up arrow`**  moves highlight the asset above
* **`down arrow`** moves highlight the asset below

## Within an Asset Modal

These shortcuts work when you are within an asset modal.

* **`cmd/ctrl + f`**  makes the asset open full-screen
* **`left arrow`** moves to the asset left
* **`right arrow`**  moves to the asset right
* **`up arrow`**  moves to the asset above
* **`down arrow`** moves to the asset below
* **`spacebar`**  plays and pauses the asset
* **`j`**  moves the playhead back 5 seconds
* **`k`**  plays and pauses the asset
* **`l`**  moves the playhead forward 5 seconds
* **`,`**  moves the playhead back 1 frame
* **`.`**  moves the playhead forward 1 frame

## Within an Asset Page

These shortcuts work when you are within an asset page, by click "Go to asset" at the top of an asset modal.

* **`cmd/ctrl + o`** opens the current folder or asset in your ShadeFS mount, if your drive is mounted
* **`cmd/ctrl + f`**  makes the asset open full-screen
* **`spacebar`**  plays and pauses the asset
* **`p`** toggles the right panel
* **`j`**  moves the playhead back 5 seconds
* **`k`**  plays and pauses the asset
* **`l`**  moves the playhead forward 5 seconds
* **`,`**  moves the playhead back 1 frame
* **`.`**  moves the playhead forward 1 frame


# Precision Filtering

Shade allows you to filter by many different attributes including metadata you create link, EXIF, and IPTC data. These filters can be accessed from the top of any asset page as shown below. Filters can be combined to find the the assets that match all the attributes you have selected.

<figure><img src="/files/3Ry43PjyERCTcga3kKxO" alt=""><figcaption></figcaption></figure>


# Proxy Generation and Complex Previews

When your assets are uploaded to Shade, our system generates H264 proxies at 1080p and \~6000K bitrate which you can view within the browser and app. These proxies can be downloaded for team members that intend to work off of proxies instead of original files.

{% embed url="<https://youtu.be/VM_yEbNp9xM?si=7eXFajvmKuMbZOH0>" %}

<figure><img src="/files/v6dVTvAUxqRBzlXUiZ6i" alt=""><figcaption></figcaption></figure>

### FAQs

<details>

<summary>Do I have to wait for a proxy to be generated before someone can download my asset?</summary>

No. As soon as your file is uploaded, it becomes available to anyone else shared on to that file. You can comment, download, and review metadata while our proxy and AI jobs run in the background. Shade also generates preview images for your video which becomes scrubbable from the asset page as soon as it has processed.

</details>

<details>

<summary>Are proxies available through the ShadeFS mount?</summary>

No. The ShadeFS mount streams the raw file to you computer. The proxy file can be downloaded from the app and then uploaded back through the app or mount. This is useful for when you anticipate using the ShadeFS mount with poor internet connection. The original media can be relinked and you timeline can be exported once you have a stronger connection.

</details>

<details>

<summary>What file types do you support for proxy generation and previews?</summary>

All of our supported file types and capabilities can be found [here](https://shade.inc/file-support).

</details>


# Asset Card Display

The asset card is the container you see your asset in. Shade currently supports a grid list, tile, or column views.

{% embed url="<https://youtu.be/Hi2ElJcR3t0?si=881DevhZGuQGYY7L>" %}

<figure><img src="/files/6YJtm9YZSUTYFKJRCTP8" alt=""><figcaption></figcaption></figure>

### View Options

#### Grid

A tiled grid-view of assets that can also include asset metadata. Choose:

* desired metadata attributes to display
* whether the thumbnail is fit or fill
* the card size

#### List

A spreadsheet-style view of your files and folder with columns and rows. Choose:

* desired metadata attributes to display
* whether the thumbnail is fit or fill
* thumbnail size

#### Tile

A metadata-free view similar to Grid where assets thumbnails match their corresponding aspect ratio. Choose:

* thumbnail size
* rounded or flat corners for thumbnails

#### Column

A left to right flow through your folder hierarchy. Choose:

* whether the thumbnail is fit or fill
* thumbnail size

### Custom Metadata Display

You can add custom metadata fields to your asset cards to display additional information:

* Create custom metadata attributes (tags, text, numbers, checkboxes, etc.)
* Choose which metadata fields are visible in your views
* View metadata in both grid and list views
* Control metadata visibility when sharing collections with clients

### Flattened Directory Views

Shade supports flattening directories to display all assets across folders in a spreadsheet-like format:

1. Within a Drive select “Display”
2. Select the “Flatten Directories” toggle

This is particularly useful for reviewing large volumes of assets across multiple folders or when you need to sort and filter by metadata fields.

{% embed url="<https://youtu.be/J0gLCpTtdwQ?si=Fu5VCi3blirzaK6p>" %}


# Copying & Moving Content

## Copying within a Drive

You can copy a file or an entire folder by right-clicking the file/folder you’d like to duplicate and selecting “Copy File/Folder.” Please note that metadata and comments are not carried over.

## Copying between Drives

Shade currently does not support a feature to copy content between drives, but content can be copied through the ShadeFS mount.&#x20;

Before you begin, your cache space must be double the size of the amount of footage you want to transfer. You can change this from your [workspace settings](/shadefs/managing-the-shadefs-cache). For example, if you want to move 50GB between your drives, you should have at least 100GB of cache space reserved.

1. Mount the drive with the source content
2. Mount the drive with the destination folder
3. Copy the folder directly from your file explorer
4. Monitor upload status from the Shade app

<figure><img src="/files/V3jhzzeGIzCxT3uvVz5A" alt=""><figcaption></figcaption></figure>

### Copies greater than your cache space

If you need to copy more content than your cache space can support, consider doing a full folder download by right-clicking on the folder and downloading, and then complete a full folder uploading by dragging and dropping the folder into the new drive.

### Copies greater than 5TB

If you need to copy more than 5TB of assets between drives, we recommend setting up an automated job using Rclone, a third party tool designed for transferring large amounts of data between remotes.\
\
<https://academy.shade.inc/guides/mass-migrating-data-to-shade-via-rclone>

## Moving Assets

You can move assets into folders by simply dragging and dropping them.

The most common reason files or folders fail to move is a naming conflict. For example, if you try moving `Asset.png` from `/Edits` to `/Ready` and a file named `Asset.png` already exists in `/Ready`, the move will fail. The same applies to folders.

Before moving assets, make sure the destination folder doesn’t already contain a file or folder with the same name.


# Search and Discovery (Transcription & Precision Filtering)

## Transcription

Whenever you upload a video or audio file containing dialogue, Shade automatically generates a full transcription. Transcriptions are time-coded, searchable, and exportable, making it easy to navigate long recordings and find specific moments without scrubbing through footage manually.

### How It Works

After a video or audio file is uploaded, Shade detects whether it contains dialogue and, if so, queues a transcription job. The transcript is broken into segments tied to specific timestamps, and different voices are automatically identified and labeled as **Speaker A**, **Speaker B**, **Speaker C**, and so on.

Because transcription runs as a background job after upload, it may take a few minutes before the transcript is available on a newly uploaded file.

### Accessing the Transcript

Open any asset with dialogue and click the **Transcription** tab in the right panel. The full transcript is displayed as a list of labeled, time-coded segments. Clicking any segment jumps the video or audio playback directly to that point, making it easy to navigate by what was said rather than by timeline position.

<figure><img src="/files/5rddZAKnuu5BKArCvkcR" alt=""><figcaption></figcaption></figure>

### Searching Within a Transcript

A search bar at the top of the Transcription panel lets you search for specific words or phrases within that file's transcript. Matching segments are highlighted, so you can quickly scan through a long recording for the moments most relevant to you.

You can also download the transcript using the export icon next to the search bar.

### Exporting a Transcript

Transcripts can be exported in several formats to fit different workflows:

* **TXT** — Plain text, useful for reading, copying, or archiving dialogue.
* **SRT** — Subtitle format, compatible with most video players and editing tools.
* **VTT** — Web-native subtitle format, commonly used for web video captions.
* **ScriptSync** — For use with professional editorial workflows that support ScriptSync-formatted transcripts.

### Searching Transcriptions Globally

Transcription content is also indexed in Shade's global AI search. To search across all transcribed files in your drive for a specific word or phrase, wrap your query in quotes.

For example, searching **"basketball"** will return every video and audio file where the word "basketball" is spoken.

### Things to Keep in Mind

* Transcription is only generated for files where dialogue is detected. Music, ambient audio, or silent video will not produce a transcript.
* Transcription runs after upload and may take a few minutes to appear. If the Transcription tab is empty on a newly uploaded file, check back shortly.
* Speaker labels (Speaker A, B, C, etc.) are assigned automatically based on voice detection. They are not linked to named individuals from the People feature.

## Precision Filtering

Shade allows you to filter files by various intrinsic, inherited, or custom metadata attributes, including but not limited to:

* Names
* Creation dates
* Extensions
* Tags
* Status labels
* EXIF data
* IPTC data

These filters can be accessed from the top of any asset page as shown below. Filters can be combined to find the the assets that match all the attributes you have selected.


# Version Control and Stacking

## Versioning and Comparison

As you’re going through review and approval cycles for your creative work, Shade enables you to nest your versions in an organized way and visually compare what changes have transpired version over version. Comparing assets isn’t limited to nested versions; you can select files from within you folder hierarchy, views, collections, or search results, and compare those as well.

Key features:

* No limits to how many versions can exist within a stack
* Compare up to 6 assets side by side at once
* Compare mixed media types to ensure a cohesive look across videos, photos, and designs

### Comparing media that hasn’t been versioned

From within your folder hierarchy, a view, collections, or search results:

1. Select up to 6 files
2. Right-click on any of the selected items
3. Choose **Compare X Assets**

A viewer window will open showing all selected assets.

* Press the play button to simultaneously playback any video files
* Select a file to view existing or leave comments
* Close the comment panel if you want to dedicate the full page to viewing whats being compared

### Versioning, managing versions, and comparing versions

#### Creating versions

There are 3 flows for versioning:

1. Upload a new file is in Shade in the same folder as the previous version or version stack
2. Drag and drop it directly onto the older version, or existing version stack

OR

1. Right-click on the file where you’re looking to add your new version
2. Choose **Upload New Version**

OR

1. Double-click a file to open it
2. Click the 3-dot menu in the top right corner
3. Choose **Upload New Version**

#### Managing versions

When viewing files and folder:

1. Right-click on a file that has versions
2. Choose **Manage Versions**
3. Click and drag handles next to version numbers to modify the order of versions
4. Click the 3-dot menu for a given version to remove from the version stack

From within the asset viewer/player page:

1. Click the 3-dot menu in the top right corner
2. Choose **Manage Versions**
3. Click and drag handles next to version numbers to modify the order of versions
4. Click the 3-dot menu for a given version to remove from the version stack

#### Comparing Version

There are 3 flows for comparing versions:

1. Right-click on a file with versions
2. Choose **Compare Versions**
3. Select the versions you want to compare

OR

1. Double-click a file to open it
2. Click the 3-dot menu in the top right corner
3. Choose **Compare Versions**
4. Select the versions you want to compare

A viewer window will open showing all selected versions.

* Press the play button to simultaneously playback any video files
* Select a file to view existing or leave comments
* Close the comment panel if you want to dedicate the full page to viewing whats being compared

##

* The team member whose changes were most recently recorded at that time

You can filter the list by date range using the **Snapshot range** pickers at the top, and adjust the sampling interval (5min, 15min, 30min, or 1hr) to control how granularly the snapshots are shown.

<figure><img src="/files/2Lmy8wereYJmvt9WHjLO" alt=""><figcaption></figcaption></figure>

### Mounting a Snapshot

Shade works by mounting your cloud drives directly to your local filesystem, making them accessible as if they were local folders on your computer. Snapshots work the same way. Clicking **Mount Snapshot** on any entry mounts that version of the drive to your local machine as a **read-only** volume.

Once mounted, you can browse the drive exactly as it existed at that moment in time, locate any files that have since been deleted or changed, and copy them back to your current drive or local machine to restore them.

The read-only mount ensures that the snapshot itself cannot be accidentally modified during recovery.

### Things to Keep in Mind

* Snapshots are read-only. You cannot edit or delete files through a mounted snapshot — they are strictly for browsing and recovery.
* Snapshot availability depends on your selected interval. Choosing a finer interval (e.g., 5 minutes) will show more snapshots within a given date range.
* If you're trying to recover a specific file, narrow your date range to around the time you believe the file existed to find the right snapshot quickly.
* Snapshots are only retained for 30 days. If a file was deleted more than 30 days ago, it will no longer be recoverable via snapshots.


# Snapshots

Snapshots give you a continuous record of your drive's history, captured at regular intervals. If files are ever accidentally deleted or overwritten, you can mount a snapshot from before that change occurred and recover what was lost, without needing to contact support or restore the entire drive.

#### How It Works <a href="#how-it-works" id="how-it-works"></a>

Shade continuously tracks changes made to your drive and records a snapshot at periodic intervals. Each snapshot represents the complete state of the drive at that point in time, along with a record of who made the most recent changes.

Snapshots are available in 5-minute, 15-minute, 30-minute, and 1-hour intervals, and can be browsed across any date range you select. Snapshots are retained for **30 days.** Anything older than that is automatically deleted and cannot be recovered.

#### Accessing Snapshots <a href="#accessing-snapshots" id="accessing-snapshots"></a>

Snapshots are found in your drive's settings. In the left sidebar, navigate to the drive you want, open its settings, and select **Snapshots**. The view lists all recorded snapshots in reverse chronological order, each showing:

* The date and time the snapshot was taken
* The commit hash identifying that state of the drive
* The team member whose changes were most recently recorded at that time

You can filter the list by date range using the **Snapshot range** pickers at the top, and adjust the sampling interval (5min, 15min, 30min, or 1hr) to control how granularly the snapshots are shown.

<figure><img src="/files/2IvHw48cwWWrmYq8FwpW" alt=""><figcaption></figcaption></figure>

#### Mounting a Snapshot <a href="#mounting-a-snapshot" id="mounting-a-snapshot"></a>

Shade works by mounting your cloud drives directly to your local filesystem, making them accessible as if they were local folders on your computer. Snapshots work the same way. Clicking **Mount Snapshot** on any entry mounts that version of the drive to your local machine as a **read-only** volume.

Once mounted, you can browse the drive exactly as it existed at that moment in time, locate any files that have since been deleted or changed, and copy them back to your current drive or local machine to restore them.

The read-only mount ensures that the snapshot itself cannot be accidentally modified during recovery.

#### Things to Keep in Mind <a href="#things-to-keep-in-mind" id="things-to-keep-in-mind"></a>

* Snapshots are read-only. You cannot edit or delete files through a mounted snapshot — they are strictly for browsing and recovery.
* Snapshot availability depends on your selected interval. Choosing a finer interval (e.g., 5 minutes) will show more snapshots within a given date range.
* If you're trying to recover a specific file, narrow your date range to around the time you believe the file existed to find the right snapshot quickly.
* Snapshots are only retained for 30 days. If a file was deleted more than 30 days ago, it will no longer be recoverable via snapshots.


# Duplicate Detection

Duplicate files waste storage and can clutter your drive over time. The Duplicates feature automatically identifies files with identical content in your drive so you can review and clean them up, without the risk of accidentally removing something important.

### How It Works

When files are uploaded to your drive, each one is assigned a unique fingerprint based on its content. These fingerprints are periodically compared to identify files with identical contents. When two or more files share the same fingerprint, they are flagged as duplicates, regardless of their filename or location in the drive.

### Accessing Duplicates

In the left sidebar, find your drive under **My Drives** and click **Duplicates** in the drive's navigation menu. This opens the **Duplicate Files** view, which lists all duplicate groups detected in that drive.

Each group shows:

* A thumbnail preview of the file
* The filename
* The number of copies found
* The file type
* The total storage being wasted by the extra copies

You can expand any group to see the individual copies side by side, along with each file's size.

<figure><img src="/files/VM9505AEJbIy4bdNN5Uz" alt=""><figcaption></figcaption></figure>

### Cleaning Up Duplicates

From within the Duplicates view you have two options:

**Delete copies:** Select the files you want to remove and move them to the trash directly from this view. This is the fastest way to reclaim storage. Before deleting, make sure the copy you're removing isn't referenced somewhere important (such as a collection or a shared link).

**Navigate to the files:** If you're unsure whether it's safe to delete a copy, right click to reveal the asset in its original location first. This lets you check its context, such as what projects it might be linked to, before deleting it.

### Things to Keep in Mind

* Duplicates are detected per drive. If the same file exists across two different drives, it will not be flagged here.
* Deleting a file that is linked or embedded elsewhere may break those references. When in doubt, navigate to the file and review its usage before deleting.
* The duplicate list refreshes periodically, so newly uploaded files may not appear immediately.


# AI Search Best Practices

You can find the media you are looking for faster with an AI search. To AI search anything in your drive, press **`cmd/ctrl + k` .** To AI search your current folder, press **`cmd/ctrl + f` .**

{% embed url="<https://youtu.be/v4_6VhK9xPM?si=ozQd6Gguks7zEOwr>" %}

{% embed url="<https://youtu.be/XZsCK2YPbn0?si=iKV5IKgBg0S8MPJW>" %}

<figure><img src="/files/0wMh2xmCa7etYcGWp6NO" alt=""><figcaption></figcaption></figure>

Shade’s AI is not centered around tags; it’s centered around creating a unified understanding of assets (the core unit of information) and text (how we typically search). Tags are only a mere snapshot of this with 1500 words that we’ve curated while creating Shade. It is not representative of every image or frame, nor does it capture semantic information such as actions etc.

DO: “Drone footage of a forest in the autumn on a mountain”

DON’T: “Forest, Trees, Drone”

DO: “Bottles on a shelf”

DON’T: “Shelf, Bottle”

After you have completed an AI search, you will want to choose the type of asset you are searching for by selecting the asset type below your query.

{% hint style="info" %}
To exclude a folder from being indexed by AI or appearing in AI searches, you can right click on any folder and press “Exclude folder from AI”
{% endhint %}

{% embed url="<https://youtu.be/lIWWwSTWYQw?si=UQMBO1EQ744zTR2E>" %}

<div data-full-width="false"><figure><img src="/files/oVhzqsdAp6hG33RuQVI8" alt=""><figcaption></figcaption></figure></div>


# Metadata and Custom Fields

Metadata for your assets can be created in under the drive settings tab on the left sidebar under your drive. Metadata field creation is separated from your main workspace view to encourage intention behind creating a metadata attribute. Metadata attributes you add to a drive can either be populated manually or populated with AI.

{% embed url="<https://youtu.be/uc0X6Vo0n68?si=lQgzSuYr5HpPnytB>" %}

{% embed url="<https://youtu.be/0rtoXWB9Ty4?si=zU23BruKhDbZTEv6>" %}

## Creating First Metadata Attribute

To create a metadata attribute:

* Add a field name
* Choose the metadata type
* Choose which types of assets to apply this attribute to (all by default)

To create an automated (AI) metadata attribute:

* Toggle the **Autofill with AI** field
* Enter a descriptive prompt
* For single-select and multi-select option, you can allow the AI to “generate new options” which

Examples of good AI Prompts:

“Identify all the jersey numbers that can be seen in the frames of this video”

“Determine which one of the shot types best apply to the video or image”

“Choose the tags that best apply to the image or video. If a tag is not available, create one. Tags should be 1-2 words long describing a specific object in the video”

## Creating Metadata from Views

Metadata attributes can also be created within a list view. This is a spreadsheet-style overview of all the assets in your drive where you can add columns for each metadata attribute within your drive.

<figure><img src="/files/s7vHObWv5AIvkugfxdEv" alt=""><figcaption></figcaption></figure>

## Editing Existing Metadata

Update aspects of your existing metadata attributes, archive them, or fully delete them.

Within the web or desktop app navigate to Settings > scroll down to your drives on the left > expand the options available for the desired drive > click **Metadata**

For any custom metadata attribute you’ll notice the following options:

### Edit

* **Field name -** the name of your metadata attribute
* **Options** (if Tags or Single-select field type)
* **Autofill with AI** (only available on certain field types)
* **AI prompt** (if Autofill with AI is enabled)
* **Generate new options with AI** (if Autofill with AI is enabled on a Tags or Single-select field type).
* **Description -** description about the field, its intended use, or purpose in your broader workflow
* **Lock metadata editing -** when locked, only drive managers and up can edit values for the metadata field

### Archive

Disables the field from being usable and visible within the drive, but doesn’t outright delete the field and all values. The field will remain within your drives metadata library and can be reactivated for later use if necessary.

### Delete

Permanently deletes the metadata attribute and all values from the drive, and cannot be undone.

## Creating Your First View

We provide 3 default views: Recents, Images, and Videos. You can create a new view by pressing the + next to the “Views” tab. After you have named your view and chosen an icon, you will be brought to the view’s page. Start adding metadata attributes by pressing the + on a new column. You can either select an existing metadata attribute or create a new attribute.


# Facial Recognition

The People feature uses AI to detect and recognize faces across the images and videos in your drive. Once individuals are tagged, you can quickly find every asset a person appears in, and even combine their name with other search terms to find exactly the moment you're looking for.

### How It Works

When assets are uploaded to a drive, any images or videos in AI-indexed folders are automatically scanned for faces. Unidentified faces (those not yet linked to a named profile) are surfaced within the asset itself, in the **Details** tab under the **Unidentified Faces** section. From there you can create a profile using that face as a starting point.

The **People** view in the left sidebar only displays individuals who have already been given a named profile. It is not a list of all detected faces, instead it is a directory of tagged people.

Facial recognition are scoped per drive. Faces indexed in one drive are not visible or searchable from another.

<figure><img src="/files/62x1LiZO2nLG7uySPsdF" alt=""><figcaption></figcaption></figure>

### Creating a Profile

There are two ways to create a profile for an individual:

**From an asset:** Open any asset containing an unidentified face, go to the **Details** tab, and find the face under **Unidentified Faces**. You can create a profile directly from there, with that face automatically used as a sample.

**From the People view:** Click **+ Add Individual** in the top right, then enter a name and manually select sample images.

Whichever path you take, you'll want to provide good sample images:

1. Enter a name for the individual.
2. Select one or more sample images to help the system learn what this person looks like.

**Tips for best results:**

* Use at least one dedicated photo where the person's face is clearly visible, unobstructed, and well-lit.
* Adding 2–3 additional sample photos meaningfully improves recognition accuracy, especially across varying angles, lighting conditions, or time periods.
* Avoid samples where the face is partially hidden, in shadow, or very small in the frame.

Once the profile is saved, the system will scan your drive's assets and surface every instance where that individual appears.

### Searching by Person

Tagged individuals are fully integrated into the drive's AI search. You can search by name alone, or combine a name with other descriptive terms to narrow results further.

For example, searching **"JJ throwing a football"** will return images and videos of JJ specifically performing that action, not just any asset containing JJ, and not just any asset of someone throwing a football.

This makes it easy to find specific moments involving specific people without having to browse manually.

### Things to Keep in Mind

* Only assets in AI-indexed folders are scanned. If a folder is excluded from AI indexing, faces in those assets will not appear in the People view.
* Newly uploaded assets may not be reflected immediately, as indexing runs after upload.
* Recognition accuracy improves with more and better-quality sample images. If results seem incomplete, try adding additional samples to the individual's profile.


# Exporting Metadata into Your NLE

How to easily export any view into your NLE

Shade supports exporting metadata directly into your NLE via .CSV and .ALE formats. You can easily access this by clicking on the view you'd like and selecting "export view". Importing&#x20;

<figure><img src="/files/xeqyDD1Tk3w4dEuol2vr" alt=""><figcaption></figcaption></figure>

## Specific notes for properly importing media into Davinci Resolve

To import Shade Metadata into Davinci Resolve, make sure you disable "Match using clip start and end Timecode". This can be found by first importing metadata to the entire media pool (or selected clips)&#x20;

<figure><img src="/files/Gdy2cuFEaw8GuqPAI52Z" alt="" width="375"><figcaption></figcaption></figure>

And then explicitly de-selecting the start and end time code checkbox.

<figure><img src="/files/ssi4mKytqBMH0hWvo0kB" alt=""><figcaption></figcaption></figure>


# Bring Your Own S3 Storage

Shade allows you to connect a self-hosted S3 bucket as your storage backend for Shade.

You can connect your own S3 storage to the Shade cloud, allowing you to configure your own buckets, regions, and permissions for your team. This is essentially paying for Shade as a service, with the ability to mount and search your assets without needing to pay for storage.

{% hint style="danger" %}
Shade will need to format your bucket to match our backend API. This means your files will be chunked with irregular UUID names and without any folders. Your team will not be able to use the S3 bucket as "regular" file storage with folders. For more information, please contact us [here](https://cal.com/team/shade-inc/shade-demo).
{% endhint %}

## Setting up a BYOS3 Drive

<figure><img src="/files/yKJFbbqxieKf9E5vjzvo" alt=""><figcaption></figcaption></figure>

Files uploaded to Shade either through the browser, desktop app, or ShadeFS mount will appear in your S3 buckets as "blobs" and "chunks".


# Connecting Shade to Backblaze

Shade supports Bring-Your-Own-S3 (BYOS3) with multiple providers such as AWS, GCP, MinIO, Wasabi, Backblaze, and more. Here’s how to connect Shade with your existing Backblaze account.

### Provisioning a New Bucket in Backblaze

{% hint style="info" %}
Although provisioning a new bucket is not strictly necessary, we highly recommend provisioning a new bucket for Shade. Shade is unable to use files in existing buckets due to the nature of ShadeFS. Shade will create two new folders `blobs` and `chunks` to any bucket that you connect to it.
{% endhint %}

If you do not have a Backblaze account already, you can create an account [here](https://www.backblaze.com/get-started). To create a new bucket in Backblaze, sign in to your account, head to Buckets, and “Create Bucket”.

{% hint style="warning" %}
When naming buckets, please avoid using number prefixes, as this can cause uploads to fail.
{% endhint %}

<figure><img src="/files/0oK1pSEKX7i16qlTmLWb" alt=""><figcaption></figcaption></figure>

Following the steps and prompts, ensure that you keep track of your **bucket name**, and your **bucket region** (as these are important and will be used in a later step). *In this case, our bucket name is “shade-new-bucket” and the region (not depicted) is us-east-005.*

<figure><img src="/files/38sL274zFCTcGmJtxCRm" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
ShadeFS does not require any other specific properties to be set on the bucket. You may opt to replicate data, log, or set up versioning as you prefer for your business.
{% endhint %}

### Configuring CORS (Easier Option but Does Not Always Work)

Cross-Origin Resource Sharing is an important characteristic that allows buckets to be accessible from other origins (such as <https://app.shade.inc>). This is critical for Shade to access and download original media for you from our app. Backblaze makes it easy to share this origin. We recommend allowing all origins. However, if you prefer a more restricted origin, it is required to whitelist `*.shade.inc` as an allowed-origin.

<figure><img src="/files/XW2wAFvWjJSJsM2ABBs6" alt=""><figcaption></figcaption></figure>

### Surefire Option of Updating CORS

B2 seems to have a few issues sometimes updating CORS directly from the UI. To surefire update your b2 bucket. You can use the [b2 cli](https://www.backblaze.com/docs/cloud-storage-command-line-tools).

#### Create a cors.json

First, create a `cors.json` file with the following content.

```json
[

  {

    "corsRuleName": "web-any-origin",

    "allowedOrigins": ["*"],

    "allowedHeaders": ["*"],

    "allowedOperations": [

      "b2_download_file_by_id",

      "b2_download_file_by_name",

      "b2_upload_file",

      "b2_upload_part",

      "s3_get",

      "s3_put",

      "s3_delete",

      "s3_head"

    ],

    "maxAgeSeconds": 3000

  }

]
```

Then open a terminal on your machine and update:&#x20;

```
b2 bucket update --cors-rules "/path/to/cors.json" your-bucket-name-here allPublic
```

It should respond with a result here:&#x20;

```json
{

    "accountId": "---------",
    "bucketId": "---------",
    "bucketInfo": {},
    "bucketName": "---------",
    "bucketType": "allPublic",
    "corsRules": [
        {
            "allowedHeaders": [
                "*"
            ],
            "allowedOperations": [
                "s3_head",
                "b2_download_file_by_id",
                "b2_upload_part",
                "b2_upload_file",
                "s3_put",
                "b2_download_file_by_name",
                "s3_delete",
                "s3_get"
            ],
            "allowedOrigins": [
                "*"
            ],
            "corsRuleName": "web-any-origin",
            "exposeHeaders": null,
            "maxAgeSeconds": 3000
        }
    ],
    "defaultRetention": {
        "mode": null
    },
    "defaultServerSideEncryption": {
        "mode": "none"
    },
    "isFileLockEnabled": false,
    "lifecycleRules": [],
    "options": [
        "s3"
    ],
    "replication": {
        "asReplicationDestination": null,
        "asReplicationSource": null
    },
    "revision": 5
}
```

### Creating Access Keys

Shade accesses Backblaze buckets via the S3 protocol, this means that Shade requires a bucket name, a bucket region, access key, and secret key in order to access this bucket.

Head to Access Keys > Create Access Key and provision a Master or Application Key. Here, we provision an application key specifically for our bucket.

<figure><img src="/files/G6oU4fMhhRik6ECZfPcB" alt=""><figcaption></figcaption></figure>

**Ensure, you have Read and Write enabled.**

Once you create a new key, copy the created key ID (Access Key for Shade) and applicationKey (Secret key for Shade) to your clipboard and save this for the next few steps.

<figure><img src="/files/u6Cr8FUyhCsi2LyBMBcR" alt=""><figcaption></figcaption></figure>

### Creating a BYOS Drive in Shade

Reaching this point, you should have successfully acquired the following items:

1. Shade Workspace
2. Bucket Name
3. Bucket Region
4. KeyID (Access Key)
5. applicationKey (Secret Key)

If you do not have a workspace already, you can create one [here](https://app.shade.inc).

Within your Shade workspace, you can now create a drive. Selecting the plus button next to “My drives” > BYOS drive.

<figure><img src="/files/X95cXiElBQZZCE7x5rdV" alt=""><figcaption></figcaption></figure>

#### Select a Template

<figure><img src="/files/QN89M1gFyRl43Uevhwg6" alt=""><figcaption></figcaption></figure>

Our templates help you get set up quickly with Shade with additional metadata and views that help you organize your files and assets. For more information about our AI you can check out our [academy](https://academy.shade.inc/ai-tools/custom-and-automated-metadata). In this case, we have selected Video Production.

#### Creating our Backblaze Drive

Next, we decide on our drive name and select our provider Backblaze.

<figure><img src="/files/SLK5X7pHCaIpLDDlltMb" alt=""><figcaption></figcaption></figure>

#### Adding Our Backblaze Credentials

From the previous steps, we add our Backblaze credentials including our bucket name, region, access key and secret key.

{% hint style="info" %}
This has to be the bucket name that you created in Backblaze. This is not the same as the drive name that you created on the previous screen.
{% endhint %}

<figure><img src="/files/woGLJuKEywUjqjvReaCh" alt=""><figcaption></figcaption></figure>

### Uploading your first file

Once you have followed the previous steps, you are now able to upload your first file to your Shade drive. If configured successfully, you should be able to upload your file and mount the Shade drive to your computer from the [Shade Desktop App](https://shade.inc/download)

<figure><img src="/files/Tukp4Kxko0fKbhuRCUpf" alt=""><figcaption></figcaption></figure>

### Troubleshooting Tips

If you have more questions - feel free to contact us at <support@shade.inc> or join our [discord](https://discord.gg/h8wqFMJ4vK).

#### I can’t upload, what’s going on?

If you are unable to upload, please check your CORS settings on your bucket or your secret / access keys and its associated permissions.


# Connecting Shade to Wasabi

Shade supports Bring-Your-Own-S3 (BYOS3) with multiple providers such as AWS, GCP, MinIO, Wasabi, Backblaze, and more. Here’s how to connect Shade with your existing Wasabi account.

### Provisioning a New Bucket in Wasabi

{% hint style="info" %}
Although provisioning a new bucket is not strictly necessary, we highly recommend provisioning a new bucket for Shade. Shade is unable to use files in existing buckets due to the nature of ShadeFS. Shade will create two new folders `blobs` and `chunks` to any bucket that you connect to it.
{% endhint %}

If you do not have a Wasabi account already, you can create an account [here](https://console.wasabisys.com). To create a new bucket in Wasabi, sign in to your account, head to Buckets, and “Create Bucket”.

<figure><img src="/files/X1UG2Edbu8GD3KkkgoC4" alt=""><figcaption></figcaption></figure>

Following the steps and prompts, ensure that you keep track of your **bucket name**, and your **bucket region** (as these are important and will be used in a later step). *In this case, our bucket name is “shade-bucket” and the region (not depicted) is us-east-1.*

{% hint style="info" %}
ShadeFS does not require any other specific properties to be set on the bucket. You may opt to replicate data, log, or set up versioning as you prefer for your business.
{% endhint %}

#### Special note about CORS

Cross-Origin Resource Sharing is an important characteristic that allows buckets to be accessible from other origins (such as <https://app.shade.inc>). This is critical for Shade to access and download original media for you from our app. By [default](https://docs.wasabi.com/apidocs/operations-on-buckets#bucket-crossorigin-resource-sharing-cors-support), Wasabi has properly set up CORS to allow all origins. However, if you have changed or restricted your origin, it is required to whitelist `*.shade.inc` as an allowed-origin.

You can update the configuration in the dashboard and here is the proper JSON:&#x20;

```
[
  {
    "AllowedHeaders": [
      "*"
    ],
    "AllowedMethods": [
      "GET",
      "PUT",
      "POST",
      "DELETE",
      "HEAD"
    ],
    "AllowedOrigins": [
      "*"
    ],
    "MaxAgeSeconds": 3000
  }
]
```

### Creating Access Keys

Shade accesses Wasabi buckets via the S3 protocol, this means that Shade requires a bucket name, a bucket region, access key, and secret key in order to access this bucket.

Head to Access Keys > Create Access Key and provision a Root or Sub-User key that has access to your newly provisioned bucket.

<figure><img src="/files/z7rGc4aVR7J8UyLnr9wW" alt=""><figcaption></figcaption></figure>

Ensure you have downloaded and copied the keys to your clipboard

### Creating a BYOS Drive in Shade

Reaching this point, you should have successfully acquired the following items:

1. Shade Workspace
2. Bucket Name
3. Bucket Region
4. Access Key
5. Secret Key

If you do not have a workspace already, you can create one [here](https://app.shade.inc).

Within your Shade workspace, you can now create a drive. Selecting the plus button next to “My drives” > BYOS drive.

<figure><img src="/files/1je7mM8YeCtXRf0EtLjL" alt=""><figcaption></figcaption></figure>

#### Select a Template

<figure><img src="/files/95tUWXuYu84U9UM2t4lT" alt=""><figcaption></figcaption></figure>

Our templates help you get set up quickly with Shade with additional metadata and views that help you organize your files and assets. For more information about our AI you can check out our [academy](https://academy.shade.inc/ai-tools/custom-and-automated-metadata). In this case, we have selected Video Production.

#### Creating our Wasabi Drive

Next, we decide on our drive name and select our provider Wasabi.

<figure><img src="/files/Z1hyQGFnVPhFWdM1bAhc" alt=""><figcaption></figcaption></figure>

#### Adding Our Wasabi Credentials

From the previous steps, we add our Wasabi credentials including our bucket name, region, access key and secret key.

{% hint style="info" %}
This has to be the bucket name that you created in Wasabi. This is not the same as the drive name that you created on the previous screen.
{% endhint %}

<figure><img src="/files/qDWYbG2mrc9TCpA8iJJV" alt=""><figcaption></figcaption></figure>

### Uploading your first file

Once you have followed the previous steps, you are now able to upload your first file to your Shade drive. If configured successfully, you should be able to upload your file and mount the Shade drive to your computer from the [Shade Desktop App](https://shade.inc/download)

<figure><img src="/files/FLPfsvoINByTAwqDBHEX" alt=""><figcaption></figcaption></figure>

### Troubleshooting Tips

If you have more questions - feel free to contact us at <support@shade.inc> or join our [discord](https://discord.gg/h8wqFMJ4vK).

#### I can’t upload, what’s going on?

If you are unable to upload, please check your CORS settings on your bucket or your secret / access keys and its associated permissions.


# Connecting Shade with Google Cloud Storage

Shade supports Bring-Your-Own-S3 (BYOS3) with multiple providers such as AWS, GCP, MinIO, Wasabi, Backblaze, and more. Here’s how to connect Shade with your existing GCP account.

### Provisioning a New Bucket in Google Cloud Storage

{% hint style="info" %}
Although provisioning a new bucket is not strictly necessary, we highly recommend provisioning a new bucket for Shade. Shade is unable to use files in existing buckets due to the nature of ShadeFS. Shade will create two new folders `blobs` and `chunks` to any bucket that you connect to it.
{% endhint %}

To create a new bucket in GCS, sign in to your account, head to cloud storage, and “Create a New Bucket”:

<figure><img src="/files/EsV7QrvjgyEN2ZyVTS6W" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
ShadeFS does not require any other specific properties to be set on the bucket. You may opt to replicate data, log, or set up versioning as you prefer for your business.
{% endhint %}

### Configuring CORS

Cross-Origin Resource Sharing is an important characteristic that allows buckets to be accessible from other origins (such as <https://app.shade.inc>). This is critical for Shade to access and download original media for you from our app. In order to set up CORS, you will need to follow these steps [here](https://cloud.google.com/storage/docs/using-cors#command-line) to install the `gcloud CLI` and configure CORS.

It is recommended to use the following JSON:

```json
[
  {
    "origin": ["*"],
    "method": ["*"],
    "responseHeader": ["*"],
    "maxAgeSeconds": 3600
  }
]
```

### Creating HMAC Keys

In order for Shade to access your GCS bucket, you will need to provision an HMAC key for a service account.

Head to Cloud Storage > Settings > Interoperability to access or generate your HMAC keys.

<figure><img src="/files/nGnBmiy8SDeo8bQtXuZJ" alt=""><figcaption></figcaption></figure>

Once you create a new key, copy the created access and secret key to your clipboard and save this for the next few steps.

### Creating a BYOS Drive in Shade

Reaching this point, you should have successfully acquired the following items:

1. Shade Workspace
2. Bucket Name
3. Bucket Region
4. Access Key
5. Secret Key

If you do not have a workspace already, you can create one [here](https://app.shade.inc).

Within your Shade workspace, you can now create a drive. Selecting the plus button next to “My drives” > BYOS drive.

<figure><img src="/files/96WNhGsZm0xLYEptRbWV" alt=""><figcaption></figcaption></figure>

#### Select a Template

<figure><img src="/files/Vs4uepp71eCUdHhthvrW" alt=""><figcaption></figcaption></figure>

Our templates help you get set up quickly with Shade with additional metadata and views that help you organize your files and assets. For more information about our AI you can check out our [academy](https://academy.shade.inc/ai-tools/custom-and-automated-metadata). In this case, we have selected Video Production.

#### Creating our GCS Drive

Next, we decide on our drive name and select our provider GCS.

<figure><img src="/files/ub0WCB5APL5vYJtseVEw" alt=""><figcaption></figcaption></figure>

#### Adding Our GCS Credentials

From the previous steps, we add our GCS credentials including our bucket name, region, access key and secret key.

{% hint style="info" %}
This has to be the bucket name that you created in GCS. This is not the same as the drive name that you created on the previous screen.
{% endhint %}

{% hint style="info" %}
Also note: if you selected multiple regions for your GCS bucket, you can safely select any region. All regions point to <https://storage.googleapis.com>
{% endhint %}

<figure><img src="/files/sPm5gYpWRWV37dbI7GGy" alt=""><figcaption></figcaption></figure>

### Uploading your first file

Once you have followed the previous steps, you are now able to upload your first file to your Shade drive. If configured successfully, you should be able to upload your file and mount the Shade drive to your computer from the [Shade Desktop App](https://shade.inc/download)

<figure><img src="/files/vkvDuWZDxlbHyss9vmKS" alt=""><figcaption></figcaption></figure>

### Troubleshooting Tips

If you have more questions - feel free to contact us at <support@shade.inc> or join our [discord](https://discord.gg/h8wqFMJ4vK).

#### I can’t upload, what’s going on?

If you are unable to upload, please check your CORS settings on your bucket or your secret / access keys and its associated permissions.


# Connecting Shade with AWS S3

**Create the bucket**

1. Create a bucket. Keep note of the region and bucket name that you create
   1. Just change the bucket name input. All other defaults can be left the same (general purpose, no ACL, block all public access, no bucket versioning, server side encryption, no advanced settings)

**CORS configuration**

1. Click into the bucket and click the permissions tab. Scroll to the `Cross-origin resource sharing (CORS)` section.

<figure><img src="/files/yxWLa0PPTUX3nsHnuipq" alt=""><figcaption></figcaption></figure>

2\. Click edit and then paste this JSON.

{% code fullWidth="false" %}

```
[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "GET",
            "PUT",
            "POST",
            "DELETE",
            "HEAD"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": [
            "ETag",
            "Content-Length",
            "Content-Disposition",
            "Content-Encoding",
            "x-amz-request-id",
            "x-amz-id-2",
            "x-amz-version-id",
            "x-amz-server-side-encryption"
        ],
        "MaxAgeSeconds": 3000
    }
]
```

{% endcode %}

This JSON is used to allow web browsers to access this bucket. This is secure as because we provide redirects from our server, we maintain the specific scope of CORs permissions so this configuration can be left generic.

**Create the scoped policy**

1. Under `IAM` click `Policies` then click `Create policy`

   1. Most mistakes that we see happen right here where the policies aren’t customized correctly

   <figure><img src="/files/gIlhC571w4oXKKh7PCab" alt=""><figcaption></figcaption></figure>
2. Make sure to customize this JSON file below to change the `Resource` entry from `the-bucket-name-you-provisioned-earlier` to the name of the bucket you created first. **This is in two spots one under the `bucketname` resource and one under the `bucketname/*` resource**

```
{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"s3:ListBucket",
				"s3:GetBucketLocation"
			],
			"Resource": "arn:aws:s3:::the-bucket-name-you-provisioned-earlier"
		},
		{
			"Effect": "Allow",
			"Action": [
				"s3:GetObject",
				"s3:PutObject",
				"s3:DeleteObject"
			],
			"Resource": "arn:aws:s3:::the-bucket-name-you-provisioned-earlier/*"
		}
	]
}
```

3. Use the JSON editor and paste this into the policy editor
4. Name your policy to be relevant to the access to the shade bucket we created earlier and add a description. Create the policy

**Create the user**

1. Now under `Users` on the left sidebar of IAM click `Create user`
2. Give the user a name thats relevant to Shade. This will be the user that Shade servers will access your bucket through and sign urls via.
3. Choose `Attach policies directly` and find the policy that you created. Hit the checkbox to attach it and press next

<figure><img src="/files/yMixNGJgBmuv1hq8qj04" alt=""><figcaption></figcaption></figure>

4. Create the user
5. Now click into the user and hit `Create access key`

<figure><img src="/files/6vreTR27XWpC85l9WhNy" alt=""><figcaption></figcaption></figure>

6. Select `Application running outside AWS`

<figure><img src="/files/nu4ExnYujfBHlk8BKpwj" alt=""><figcaption></figcaption></figure>

7. Save the created Access and Secret key to your computer

**Create drives in Shade**

1. In the Shade app create a BYOS drive

<figure><img src="/files/8JV7zr2OesGbCINN1CY8" alt=""><figcaption></figcaption></figure>

2. Use the `Custom` configuration for creating your bucket
3. Fill the configuration with the proper values. Pay attention to the endpoint. Use the `s3.<region>.amazonaws.com` format prefixed with `https://`. Find these endpoints depending on the region you created your bucket in under `Amazon S3 endpoints` on this page: <https://docs.aws.amazon.com/general/latest/gr/s3.html>

<figure><img src="/files/V4yy4jujyt3tTJ2JFzqe" alt=""><figcaption></figcaption></figure>

4. Upload a file for testing. You should see objects appear in your S3 bucket, the file should upload and get previews/proxies normally.


# Billing

Billing is managed at the workspace level. The pricing is simple: you are charged for seats and storage. You can view our pricing plans [here](https://shade.inc/pricing). Seats are prorated on a monthly basis and storage is prorated on a hourly basis.

Our billing viewing and management is split between 3 pages on the app.

<figure><img src="/files/hjcnBRq2E2vT8bSd18HE" alt=""><figcaption></figcaption></figure>

## Usage

Your workspace usage can be found under Settings/Usage. This page is an overview of how your workspace is using seats, storage, drives, and credits.

## Plans

Your workspace plan can be found under Settings/Plans. This page is an overview of your current plan, and what features you have access to under that plan.

## Billing

Your workspace billing can be found under Settings/Billing. This page is a breakdown of your plan, billing cycle, and upcoming invoices.

## FAQs

### How can lower my bill?

You can move your workspace members to being guests on the drives they need to access. Note that drive guests will not be able to mount or access metadata on those drives even if they have full access. Purchasing storage in bulk is another way to lower your storage cost. You can also lower your storage costs by considering using a proxy workflow [here](https://academy.shade.inc/guides). In a proxy workflow you keep your raw files on disk or NAS, and sync proxies to a mounted Shade drive.


# How your Data is Stored and Protected

### Data Storage and Protection Policies

At Shade we take your data storage and protection seriously. To this end, we have numerous policies in place to ensure that your valuable data is stored in a secure and recoverable manner.

#### Automated Data Backups

To ensure that files and projects are recoverable in the event of a crisis, Shade performs encrypted automatic backups of your data to several different storage platforms, so in the event of a crisis your files will always be recoverable. This ensures that we always have at minimum 3 copies of data stored.

#### File Deletion

In the event of file deletion, our backup system maintains a seven-day retention period, allowing for quick recovery of accidentally removed data. The backup process is fully automated and monitored through our alerting system, with any backup failures immediately triggering notifications to our security team.

#### AI Usage

Shade optionally uses AI models to automatically index your data. You can easily control which folders are indexed by our models inside of the app itself by simply selecting folders and excluding them from AI. A full list of these folders can be seen at a drive level. Additionally, your data is never used for training purposes and is always encrypted. Our full data use and AI policy can be found [here](https://shade.inc/legal/artificial-intelligence-and-biometric-data-frequently-asked-questions).


# Using Shared Cache

Shared Cache is an on-prem server that enables teams to securely share files that have been accessed by other team members within the same LAN.

As an example:

1. **Team Member 1** access `large_video.mp4` while connected to the shared cache
2. ShadeFS begins serving that file to **Team Member 1** from the cloud
3. In the background, the shared cache also begins caching `large_video.mp4`
4. The shared cache fully finishes caching `large_video.mp4`
5. **Team Member 2** now accesses `large_video.mp4` in ShadeFS
6. The shared cache runs permission checks to validate **Team Member 2** has access to `large_video.mp4`
7. `large_video.mp4` is immediately served at the maximum speed of the LAN from the shared cache

In this setup, the second access is both served at the maximum speed making playback largely instant and avoids using bandwidth against the cloud. Large shared cache instances can almost entirely avoid cloud round trips except for the first access.

## Download & Setup

Shared Cache is a terminal executable with no UI. You can get a version to download by asking us. The defaults are generally correct for most setups meaning for most people it's typically just a double click to launch.

## S3 Support

Shared Cache supports using both a local (disk) backend and an on prem S3 target for caching data. This can be enabled by passing `--storage-backend=s3` with the endpoint, bucket, region, access, and secret.

## Configuration Options

```bash
Usage: shared-cache [options]

Options:
  --port <number>                    Server port (default: 8003)
  --fs-ws-url <url>                  Upstream ShadeFS WebSocket URL (default: wss://fs.shade.inc)
  --fs-api-url <url>                 Upstream ShadeFS API URL (default: https://fs.shade.inc)
  --local-cache-location <path>            Cache storage directory (default: ./cache)
  --database-location <path>         SQLite database file path (default: ./shared_cache.db)
  --max-cache-size <bytes>           Maximum cache size in bytes (default: 500GB)
  --cache-check-interval <ms>        Cache cleanup interval in milliseconds (default: 300000)
  --storage-backend <type>           Storage backend: filesystem or s3 (default: filesystem)
  --discovery-server-name <name>     mDNS service name (default: Default Name)

  S3 Storage Options (when --storage-backend=s3):
  --s3-endpoint <url>                S3 endpoint URL
  --s3-bucket <name>                 S3 bucket name
  --s3-region <region>               S3 region
  --s3-access-key-id <key>           S3 access key ID
  --s3-secret-access-key <secret>    S3 secret access key
  --s3-path-prefix <prefix>          S3 key prefix (optional)

  Advanced Options:
  --download-worker-count <number>   Number of download workers (default: 5)
  --download-concurrent-chunks <n>   Concurrent chunks per worker (default: 4)
  --download-chunk-size <bytes>      Download chunk size (default: 128MB)
  --upload-concurrent-chunks <n>     Concurrent upload chunks (default: 4)
  --upload-chunk-size <bytes>        Upload chunk size (default: 64MB)
  --version, -v                      Show version information
  --help, -h                         Show this help message

Environment Variables:
  All options can also be set via environment variables using SCREAMING_SNAKE_CASE.
  Example: PORT, FS_WS_URL, CACHE_LOCATION, MAX_CACHE_SIZE_BYTES, etc.

Examples:
  ./shared-cache --port 8080 --local-cache-location /var/cache/shade
  ./shared-cache --storage-backend s3 --s3-bucket my-bucket --s3-region us-east-1
  PORT=8080 LOCAL_CACHE_LOCATION=/var/cache/shade ./shared-cache
```

## Joining the Shared Cache

Because the permissions are handled by the Shared Cache, joining is incredibly easy and requires no password. The shared cache advertises using bonjour. In most cases clients on the same network detect it and a modal will pop up asking if they would like to join.

If no modal appears, the cache can be joined directly by going to Settings → Shared Cache → Connect Manually and typing in the address. An example input might look like `http://192.168.1.45:8003`

## Shared Cache not working?

If Shared Cache isn't working or you don't see other devices on your network:

1. Open System Settings → Privacy & Security → Local Network.
2. Make sure Shade is enabled.
3. If it was disabled, enable it and restart Shade before trying again.


# Enterprise Security and SSO

For organizations on the Enterprise plan, Shade supports integrating your workspace with an identity provider. Once configured, team members with your verified domain are automatically redirected to your identity provider to sign in, and you can use SCIM to sync groups and their members directly into Shade.

**How It Works**

SSO and SCIM setup begins with verifying your domain inside Shade. After verification, you can configure Single Sign-On (SSO) using SAML 2.0 with a wide range of identity providers. Once SSO is active, any user added to your Shade workspace with your verified domain will be redirected to your identity provider when they attempt to log in, authenticating there rather than directly in Shade.

SCIM (System for Cross-domain Identity Management) extends this further by allowing you to provision groups from your identity provider into Shade. When a group is provisioned via SCIM, its members are automatically added to your Shade workspace as Contributors. These synced groups appear in Shade's Groups section with the type labeled as "Directory," distinguishing them from groups created manually inside Shade.

**Setting Up SSO**

To configure SSO for your workspace:

1. Navigate to your workspace Settings and open Enterprise section
2. Under “Domain Verification” click “Add domain” and follow the provided steps to verify your organization’s domain.
3. Once confirmed, select “Set up SSO” within Shade.
4. Select your identity provider from the list of supported SAML providers and follow the configuration steps to complete the connection.

Once SSO is active, users with your verified domain will be redirected to your identity provider at login.

**Setting Up SCIM**

SCIM provisioning allows you to manage workspace membership directly from your identity provider. To enable it, select “Set up SCIM” within the Enterprise section of your workspace, and follow the provided steps to link with your provider.

Once SCIM is configured:

* Members inside provisioned groups are added to your Shade workspace automatically as **Contributors**.
* Provisioned groups appear in the **Groups** section in Shade with the type **Directory**.

**Using Directory Groups**

Directory groups can be assigned permissions at the workspace or drive level, just like manually created groups. Adding a directory group to a workspace or drive grants all members within that group the corresponding level of access.

To assign a directory group, navigate to the Members or Permissions panel at the workspace or drive level and add the group as you would any other.

**Things to Keep in Mind**

* SSO and SCIM are available on the **Enterprise plan only**.
* Domain verification is required before SSO can be configured.
* Members provisioned via SCIM are added as **Contributors** by default. Permissions can be adjusted after provisioning.
* Directory groups are managed through your identity provider. Changes to group membership in your provider will sync to Shade automatically.
* Directory groups are read-only within Shade. To add or remove members, make changes in your identity provider.


# Deploying the Shade PKG to Jamf Pro

This guide walks through downloading the Shade installer package (PKG) and uploading it into Jamf Pro so it can be deployed to Macs.

{% hint style="info" %}
For the latest documentation, please refer to [Jamf Pro's PKG Documentation](https://learn.jamf.com/r/en-US/jamf-pro-documentation-current/Viewing_the_Contents_of_an_Indexed_Package)
{% endhint %}

#### Prerequisites

* Access to Jamf Pro with permissions to upload packages (typically **Jamf Pro Server Administrator** or a role that can manage Packages).
* A Mac with a browser that can download the installer.
  * If you are downloading the macOS app, Shade recommends using a browser other than Safari.

#### 1) Download the Shade PKG

1. Open: <https://shade.inc/download>
2. Under **Download Shade**, choose the correct build for your Mac:
   * **macOS (Apple Silicon)** for M-series Macs (M1, M2, M3, M4)
   * **macOS (Intel)** for Intel Macs
3. Download the installer file.
4. Confirm the download completed and you have a single installer file to upload (for example, in **Downloads**).

#### 2) (Recommended) Validate the package before upload

1. Verify you downloaded the correct architecture (Apple Silicon vs Intel).
2. Make sure the file:
   * Opens or installs successfully on a test machine.
   * Has a reasonable file size (not suspiciously small).
3. Rename the file to something clear and versioned (recommended), for example:
   * `Shade-Desktop-<version>.pkg`

#### 3) Upload the PKG to Jamf Pro

1. Sign in to **Jamf Pro**.
2. Go to **Settings**.
3. Navigate to the **Packages** section (sometimes listed under **Computer Management** depending on your Jamf Pro version).
4. Click **New** or **Upload** (label varies by Jamf Pro version).
5. In the upload form, select the Shade PKG you downloaded.
6. Configure key **Package Settings** (common options):
   * **Display Name**: Use a clear name (for example, `Shade`).
   * **Category**: Optional, but helpful for organization (for example, `Applications`).
   * **Priority**: Keep the default unless you have multiple dependent packages.
   * **OS Requirements**: Set minimum macOS version if your environment requires it.
   * **Architecture**: If Jamf allows specifying it, match the package you downloaded (Apple Silicon vs Intel).
7. Save.
8. Wait for the upload to finish, then confirm the package appears in the **Packages** list.

#### 4) Confirm the package is available for deployment

1. Open the uploaded package in Jamf Pro.
2. Confirm:
   * The package name and details look correct.
   * The package shows as successfully uploaded (no errors).

#### 5) Next steps (optional): Deploy to devices

After the PKG is uploaded, you can deploy it using one of these approaches:

* **Policy**: Install Shade on demand (Self Service) or automatically (recurring check-in, enrollment).
* **PreStage enrollment**: Install during enrollment workflows.

#### Deploy via Self Service (On-Demand)

Use this method if you want Shade to be available in the Jamf Self Service app, allowing users to choose when to install it.

1. **Create a New Policy**: In Jamf Pro, go to **Computers** > **Policies** and click **New**.
2. **General Payload**:
   * **Display Name**: `Install Shade`
   * **Trigger**: None (Self Service policies do not require a system trigger).
   * **Execution Frequency**: `Ongoing` (this allows users to re-install the app if they move to a new machine or accidentally delete it).
3. **Packages Payload**:
   * Click **Configure** and find your uploaded Shade PKG.
   * Ensure the Action is set to **Install**.
4. **Self Service Payload**:
   * Click the **Self Service** tab at the top.
   * Check the box **Make the policy available in Self Service**.
   * **Self Service Display Name**: `Shade`
   * **Button Name**: `Install`
   * **Description**: Provide a brief description (e.g., "Shade is your creative asset manager...").
   * **Icon**: Upload the Shade application icon for a professional look.
5. **Scope**:
   * Click the **Scope** tab.
   * Add the specific computers or Smart Groups (e.g., "All Managed Clients") that should see Shade in their Self Service catalog.
6. **Save**.

***

#### Deploy via Silent Install (Automatic)

Use this method if you want Shade to be installed automatically on background Macs without any user interaction.

1. **Create a New Policy**: In Jamf Pro, go to **Computers** > **Policies** and click **New**.
2. **General Payload**:
   * **Display Name**: `Deploy Shade - Automatic`
   * **Trigger**: Select **Recurring Check-in** (this is the standard trigger for silent background deployments).
   * **Execution Frequency**: Select **Once per computer**.
3. **Packages Payload**:
   * Click **Configure** and find your uploaded Shade PKG.
   * Ensure the Action is set to **Install**.
4. **Maintenance Payload**:
   * Click **Configure** and check the **Update Inventory** box. This ensures that Jamf knows the app is installed immediately after the policy runs.
5. **Scope**:
   * Click the **Scope** tab.
   * Add the computers or Smart Groups that require Shade.
   * *Tip: Use a Smart Group that targets computers where "Shade.app" is not currently installed.*
6. **Save**.

***

#### Verify Deployment

After saving your policy, you can monitor its progress:

* **Logs**: Open the policy in Jamf Pro and click the **Logs** button at the bottom right. This will show you which computers have successfully installed the package and which are still pending.
* **Inventory**: Check an individual computer’s inventory record under **Applications** to confirm `Shade.app` appears in the list.

#### Troubleshooting Tips

* **Architecture Mismatch**: If a silent install fails, verify that you haven't deployed an Intel PKG to an Apple Silicon (M1/M2/M3) Mac.
* **File Vault**: If you are deploying during Enrollment (PreStage), ensure the "Fill User Template" or "At Restart" options are NOT selected, as Shade should be installed into the `/Applications` folder normally.


# Tips & Tricks

Our goal is to help you succeed with Shade. Explore these short tutorials for practical tips that make everyday tasks simpler and more efficient.

{% embed url="<https://youtu.be/eSFTWzXja38?si=4Oyus0OL38dSaHOD>" %}

{% embed url="<https://youtu.be/Z0ZGrMs9wro?si=k5McIm4fzJ3QSDsG>" %}

{% embed url="<https://youtu.be/bjeSPfyuuio?si=BowHWtlWNTNL_M-y>" %}

{% embed url="<https://youtu.be/lykBoh5COhU?si=_DtikEfwV2qn5OBS>" %}

{% embed url="<https://youtu.be/guA8ljJP-ak?si=ZLcvf9V5j-zbS3BC>" %}

{% embed url="<https://youtu.be/rq7gqOo0ywc?si=E7YpYxJZaMGp0cFy>" %}

{% embed url="<https://youtu.be/VDdHZvSppjw?si=3zGzo1Sjp5U447Xt>" %}

{% embed url="<https://youtu.be/Ds6u1Pb6PDM?si=zE6gGP2GgwwuE1GY>" %}


# How to use Shade with Adobe Premiere Pro

Follow this video and guide to properly set up Adobe Premiere Pro for Shade

## **Remote Collaboration with Adobe Premiere Pro**

ShadeFS enables seamless remote collaboration in **Adobe Premiere Pro** by eliminating the need for downloads, syncs, or relinking media. This guide provides step-by-step instructions on how to use ShadeFS efficiently for various Premiere Pro workflows.

{% embed url="<https://youtu.be/ARfyYCLPZ0w?si=Xe20tEZ6Lp-fUihk&t=74>" %}

{% hint style="info" %}
Depending on your internet connection, bandwidth, and file types, we recommend adopting a proxy or a reduced playback resolution workflow. For more information on typical internet and bandwidth considerations, see [Understanding Internet Speeds and ShadeFS Storage](/shadefs/understanding-internet-speeds-and-shadefs-storage)
{% endhint %}

***

### **Setting Up Your Shade Drive for Premiere Pro**

#### **Step 1: Connect to ShadeFS**

* Ensure your **Shade app** is installed and running.
* Mount the Drive that you're looking for and ensure that it shows up properly in finder.&#x20;
* Navigate to the designated project folder.

#### **Step 2: Organize Your Project Folder**

{% hint style="info" %}
These are only recommendations, if you have a specific project template, feel free to follow suit. We will use this for the rest of the proxy steps
{% endhint %}

* Create a **main project folder** within the Drive.
* Inside the main folder, create subfolders:
  * `/Projects` - Store Premiere project files here.
  * `/Media` - High-resolution footage storage.
  * `/Proxies` - Lower-resolution proxy files for remote editing.
  * `/Exports` - Final rendered outputs.

#### **Step 3: Enable Project Locking (Optional)**

* Open Premiere Pro > **Preferences** > **Collaboration**.
* Enable **Project Locking** to prevent overwrites.
* Assign a **username** so others can identify project owners.

***

### **Working with Premiere Pro Project Types in ShadeFS**

ShadeFS enhances the three main ways of working in Premiere Pro:

#### **A. Individual Projects**

* Save `.prproj` files directly into the **Projects** folder.
* No need to relink media—Premiere recognizes all files instantly.
* If multiple users open a project, **only the first editor** can modify it, while others get **read-only** access.

#### **B. Premiere Productions**

* Organize large projects with multiple editors using **Productions**.
* Store **Production folders** directly in the Filespace.
* Editors work on individual project files within the Production without version conflicts.

#### **C. Team Projects**

* Continue using Premiere **Team Projects** while storing media in ShadeFS.
* Eliminates the need for downloading media locally.
* Ensures real-time collaboration without re-uploading assets.

***

## Ingest Workflow 1: Reduced Playback Resolution (1/2, 1/4, 1/8)

{% hint style="success" %}
This method greatly reduces the need to generate proxies, store additional data and offers users quick speed and one timeline to work with! We highly recommend this ingest workflow
{% endhint %}

To reduce the amount of data and to not require generating proxies, you can opt to adjust your timeline specs to play back at 1/2, 1/4, or 1/8 resolution. This can help when editing larger files and can be found right above the proxy button. This can work well with large files like .MXFs and 4K footage when you're just making the initial cut.&#x20;

<figure><img src="/files/8LD6vPRQTeTJ84GuQ82i" alt=""><figcaption></figcaption></figure>

***

## **Ingest Workflow 2: Creating Proxies in Premiere Pro**

Using **Premiere Pro’s ingest workflow**, you can create and store **frame-accurate proxies** alongside full-resolution files directly on ShadeFS.

{% hint style="info" %}
We highly recommend creating proxies from the original footage locally before uploading to Shade to maximize speed and time to edit.&#x20;

However, if you've already copied footage, you can use Shade's built-in edit-ready h.264 proxies
{% endhint %}

### **Step 1: Configure Your Folders**

1. Open your **Shade Drive** and navigate to the project folder.
2. Create two subfolders:
   * `/Media/HighRes` for full-resolution files.
   * `/Media/Proxies` for proxy media.

### **Step 2: Configure Premiere’s Ingest Settings**

1. Open **Premiere Pro** and create a new project.
2. Set the **Project Save Location** inside the `/Projects` folder on ShadeFS.
3. Go to **Project Settings > Ingest Settings**.
4. Enable **Ingest** and select **Copy and Create Proxies**.
5. Choose the following destinations:
   * **Primary Folder:** `/Media/HighRes`
   * **Proxy Folder:** `/Media/Proxies`
6. Click **OK** to apply the settings.

<figure><img src="/files/eT96uTKUSFOaEKg2gut0" alt="" width="375"><figcaption></figcaption></figure>

### **Step 3: Import & Generate Proxies**

1. Insert the **camera media card** into your system.
2. Open **Premiere Pro** and navigate to **Media Browser**.
3. Select your clips and click **Import**.
4. Premiere will automatically **copy full-resolution files** to `/Media/HighRes` and create proxies in `/Media/Proxies` using **Adobe Media Encoder**.
5. Monitor progress in **Premiere Pro’s progress bar** or **ShadeFS upload status**.
6. Begin editing using **proxy mode** for smoother performance.

### **Using Shade's Proxies:**

If you've already uploaded your media to Shade, you can also use Shade's edit ready 1080p proxies (more information about them can be found at [Proxy Generation and Complex Previews](/assets/markdown)). They even support mono and multi-channel audio.

You can easily download proxies for these files once they're all generated by right clicking the folder that you're looking to download and selecting "Download proxies".

Once the proxies are downloaded and placed into the Shade drive, you can attach the proxies to the original resolution media.

<figure><img src="/files/079wtlTsH1Tk4nbuGnik" alt="" width="375"><figcaption></figcaption></figure>

***

### **Optimizing Adobe Premiere Pro for ShadeFS**

#### **Step 1: Disable Automatic Audio Waveform Generation**

* Navigate to **Preferences > Audio**.
* Disable **Automatic Audio Waveform Generation t**o prevent unnecessary file preloading.

<figure><img src="/files/ydTcQm9IHYtCfMw5ytT7" alt=""><figcaption></figcaption></figure>

#### **Step 1.5: Disable Media Analysis**

{% hint style="info" %}
If you prefer to use Adobe's AI, you will need to pin the files as Adobe reads the entire file upfront
{% endhint %}

* Navigate to **Media Analysis & Transcription**.
* Disable **Analyze all imported media to search for visuals** or audio to prevent unnecessary file preloading.
* Disable **Automatically transcribe clips**

<figure><img src="/files/f1JAogxZB6kBPiYT45Zx" alt=""><figcaption></figcaption></figure>

#### **Step 2: Enable Project Locking for Team Collaboration**

1. Open **Preferences > Collaboration**.
2. Enable **Project Locking**.
3. Enter your **username** to display for team members.

<figure><img src="/files/dBGQuNG9coPF8JZgAJbl" alt=""><figcaption></figcaption></figure>

#### **Step 3: Use Proxy Mode for Faster Editing**

* Toggle **proxy mode** via the **button editor** in Premiere.
* Switch between **full-resolution** and **proxy files** instantly.

<figure><img src="/files/FlgALofU7E6GvPSvQZKO" alt=""><figcaption></figcaption></figure>

## Additional Optimizations for the Best Performance <a href="#h_529dfdf0a2" id="h_529dfdf0a2"></a>

### Set your scratch disks to a local drive <a href="#h_529dfdf0a2" id="h_529dfdf0a2"></a>

For best performance when working on Shade Storage, we recommend setting your scratch disks to a fast local drive. Under Project Settings, navigate to Scratch Disks and change the scratch disk location.

For more information about Premiere Pro Scratch Disks and its use case, see [here](https://helpx.adobe.com/premiere-elements/using/scratch-disks.html)

{% hint style="info" %}
You can also save scratch disks alongside the project for quick switching between team members. To ensure smooth performance, we recommend pinning the scratch disk folders in advance as this will automatically sync.&#x20;

Check out [this great video](https://youtu.be/rd4WFU3Cw4E?si=iLMNIohNJYEGasaQ) on how to configure this for Premiere team projects
{% endhint %}

### Optimize Rendering for Performance <a href="#h_c62248d742" id="h_c62248d742"></a>

Allocate as much Random-access memory (RAM) as you can spare

<figure><img src="/files/nqzP8WYTNvPYZUzfRjci" alt=""><figcaption></figcaption></figure>

### Disable Mercury Transmit <a href="#h_8ceb82e722" id="h_8ceb82e722"></a>

To reduce RAM utilization - you should disable Mercury Transmit.

<figure><img src="/files/l9vbbxa2ZhkO06VeFU1u" alt=""><figcaption></figcaption></figure>

### Disable XMP ID (Extensible Metadata Platform) <a href="#h_af8d1dab37" id="h_af8d1dab37"></a>

When working off shared storage like ShadeFS, Adobe recommends turning off XMP ID to improve performance. To do this, go to Preferences > Media and uncheck:

• Write XMP ID to Files on Import

• Write Clip Markers to XMP

This will help reduce unnecessary metadata writing, ensuring smoother performance in shared environments.

<figure><img src="/files/1BBRZFEfPfX4izP10Tch" alt=""><figcaption></figcaption></figure>

If you do require XMP IDs, we recommend following a process like below:

* Open Preferences > Media and check "Write XMP ID to files on import" is enabled
* Import the media (the ID is written into XMP)
* Share the media files to the other editors

### Disable "Automatically Refresh Growing Files" <a href="#h_239eca27df" id="h_239eca27df"></a>

Unless you are doing live productions, we recommend turning off refresh growing files. To turn it off, go to Preferences > Media, then uncheck Automatically Refresh Growing Files under your Project Settings.

<figure><img src="/files/jgiL1Cj0dBcGQfsfH83z" alt=""><figcaption></figcaption></figure>

### Media Cache Location <a href="#h_2be52120ae" id="h_2be52120ae"></a>

To maximize playback performance, go to Preferences > Media Cache and select an internal SSD as your cache file location. This allows for quicker media access and a smoother editing workflow. This is typically set to an internal location  on the computer by default.

<figure><img src="/files/7t0GW3sC5LQTMOzL6jfq" alt=""><figcaption></figcaption></figure>

<br>


# How to use Shade with Davinci Resolve Projects

Follow this video and guide to properly set up Davinci Resolve for Shade.

ShadeFS enables seamless remote collaboration for DaVinci Resolve, allowing colorists and editors to work directly with high-resolution media without the need for downloads or manual synchronization. Integrated with Blackmagic Cloud, ShadeFS makes media and project files are instantly accessible from anywhere, streamlining editing, color grading, and VFX workflows.

This guide explains how to set up and optimize **DaVinci Resolve for cloud-based editing and color correction using ShadeFS**.

***

## **1. Why Use ShadeFS for DaVinci Resolve?**

High-resolution color correction and VFX work require access to original camera files or high-quality intermediate codecs (e.g., ProRes, EXR sequences). Traditionally, these files must be copied to fast local SSDs to ensure smooth playback. ShadeFS eliminates this requirement by allowing direct access to high-bandwidth media in the cloud while maintaining real-time performance.

### **Key Benefits of ShadeFS with DaVinci Resolve**

* **Edit and grade directly from the cloud** – no need to download massive files.
* **Seamless integration with Blackmagic Cloud** – project files remain accessible to everyone.
* **Smart caching and pinning** – access only the necessary frames without full downloads.
* **Optimized for stop/start workflows** – perfect for colorists working frame by frame.
* **Cloud workstations** – edit and grade using powerful virtual machines for ultimate speed.

***

## **2. Setting Up DaVinci Resolve with ShadeFS**

### **Step 1: Mount Your ShadeFS Drive**

* Ensure your **Shade app** is installed and running.
* Mount the **a Shade drive** and confirm that it appears in **Finder (Mac) or File Explorer (Windows)**.
* Navigate to your project folder within the **ShadeFS mount**.

### **Step 2: Organize Your Project Folder Structure**

For a streamlined workflow, use the following recommended structure inside the mounted drive:

* `/Resolve Projects/` – Store DaVinci Resolve `.drp` project files here.
* `/Media/` – Store all original footage and high-resolution files.
* `/Proxies/` – Store lower-resolution proxies for remote editing.
* `/Renders/` – Store final color-graded exports.
* `/Cache/` – Store Resolve’s cache and optimized media for smooth playback.

### **Step 3: Configure Media Storage Settings in DaVinci Resolve**

* Open **DaVinci Resolve** and go to **Preferences > Media Storage**.
* Add your **ShadeFS mount path** as the primary media storage location.
* Ensure cache and optimized media are stored in `/Cache/` within ShadeFS or on a **fast local SSD** for better performance.

### **Step 4: Set Up Blackmagic Cloud for Team Collaboration**

* Navigate to **DaVinci Resolve > Project Manager**.
* Sign in to **Blackmagic Cloud** and create a **cloud project**.
* This allows team members to **access the same Resolve project** remotely, while ShadeFS ensures **all media remains instantly accessible**.

***

## **3. Working with High-Resolution Footage in the Cloud**

Unlike traditional editing workflows that rely on **proxy media**, **color grading and VFX require direct access to full-resolution files**.

### **Step 1: Frame-by-Frame Playback with ShadeFS**

* Open **DaVinci Resolve** and navigate to the **Color Page**.
* Select a shot and move the playhead to the desired frame.
* **ShadeFS will intelligently download only the required bytes to build the frame**, ensuring fast access without full downloads.

This allows colorists to **work frame by frame** on **Sony Venice RAW, RED, ARRI, ProRes, or EXR sequences** without waiting for terabytes of data to download.

### **Step 2: Real-Time Scrubbing and Processing**

* Scrub across a clip to preview motion.
* Perform **motion tracking, noise reduction, or temporal effects** without lag.
* **ShadeFS dynamically pulls only the necessary frames**, reducing unnecessary bandwidth usage.

### **Step 3: Smart Caching for Faster Performance**

ShadeFS automatically **caches the most frequently accessed frames**, reducing repeated downloads. If additional performance is needed:

* Store **DaVinci Resolve Cache** on a **local SSD**.
* Increase **cache size in Resolve’s settings** to ensure smooth playback.

***

## **4. Optimizing Playback and Rendering in ShadeFS**

### **Step 1: Pinning Media for Maximum Performance**

If you need **real-time playback of high-bandwidth media**, you can **preload media blocks using Shade’s Pinning**:

* Right-click a **folder** in the Shade app.
* Select **“Pin”** to ensure all frames are preloaded.

Unlike traditional downloads, **pinned media stays up to date**—any changes made by other users will **automatically sync**, avoiding version conflicts.

### **Step 2: Using Local SSDs for Maximum Speed**

* **Cache render files locally** for faster performance.
* Under **DaVinci Resolve Preferences > General > Cache Files Location**, set it to a **high-speed local SSD**.

### **Step 3: Using Cloud Workstations for Heavy Workloads**

For the most demanding workflows, **cloud workstations provide the best performance**:

* Use a high-performance **virtual machine (VM) with ShadeFS access**.
* VMs typically have **higher bandwidth** than home internet connections, making playback smoother.
* Perform all **color grading and VFX work** remotely while keeping data in **ShadeFS**.

***

## **5. Exporting & Delivering Final Renders**

### **Step 1: Rendering Directly to ShadeFS**

Once color grading is complete, export directly to the ShadeFS mount **for collaboration or final delivery**:

* Go to **Deliver Page** in DaVinci Resolve.
* Set **Render Destination** to a folder in your **ShadeFS mount (e.g., /Renders/Final/)**.
* Select an **export format**:
  * **ProRes 4444** for high-quality masters.
  * **DNxHR HQX** for post-production workflows.
  * **H.264/H.265** for client review or web delivery.

### **Step 2: Collaborating on Exports**

* Share rendered files via **ShadeFS’s built-in sharing features**.
* Use **Blackmagic Cloud** to provide project-wide access to exported sequences.

### **Step 3: Archiving Projects in ShadeFS**

* Move completed **Resolve projects** to an **/Archives/** folder.
* Store only **essential final exports and project files** to optimize space.
* Keep raw footage in ShadeFS for future revisions.

***

## **Final Thoughts**

Using **ShadeFS with DaVinci Resolve** eliminates the **need for local storage**, allowing editors and colorists to work on **full-resolution files directly from the cloud**.


# How to use Shade with AVID Media Composer

This guide will walk you through how to effectively use the **ShadeFS Mount** with **Avid Media Composer**, enabling your team to seamlessly collaborate remotely and eliminate the need for file syncing or relinking media. With ShadeFS, you can edit high-resolution media directly from the cloud without downloading large files locally.

***

## **1. Setting Up Your ShadeFS Mount for Avid Media Composer**

### **Step 1: Connect to ShadeFS**

To begin working with Avid Media Composer on a ShadeFS mount, follow these steps:

* Ensure **ShadeFS** is installed and running on your system.
* Mount a **drive** and verify that it appears correctly in **Finder (Mac) or File Explorer (Windows)**.
* Navigate to the **designated project folder** within the ShadeFS mount.

### **Step 2: Create a New Avid Media Composer Project**

* Open **Avid Media Composer**.
* Select **New Project** and set the **project save location** inside your **ShadeFS mount**.
* Organize your project folder with the following recommended structure:
  * `/Projects` – Store Avid project files here.
  * `/Media` – High-resolution footage storage.
  * `/Proxies` – Lower-resolution proxy files for remote editing.
  * `/Exports` – Final rendered outputs.

### **Step 3: Configure Media Creation Settings**

To ensure your media files are stored correctly in ShadeFS:

* Go to **Settings > Media Creation** in Avid.
* Set the **Media Files Destination** to a folder within the **mounted drive** (e.g., `/Media`).
* This ensures that all media is stored in the cloud, making it accessible to all collaborators.

***

## **2. Importing and Linking Media in ShadeFS**

### **Step 1: Adding Media via AMA Link**

* Open your **Avid bin** and right-click to select **Input Source Browser**.
* Navigate to your **drive mount** where media is stored.
* Select the desired clips and choose **Link via AMA**.

### **Step 2: Transcoding to Avid Native Formats**

After linking the media, it’s best to transcode to an Avid-native format for smooth playback and editing:

* Right-click the linked clips and select **Consolidate/Transcode**.
* Choose **Transcode** and set the **destination folder** inside the ShadeFS mount (e.g., `/Media`).
* For best performance, select **DNxHD LB or DNxHR LB** for efficient cloud-based editing.

Because ShadeFS allows real-time access to cloud storage, your media files will be **instantly available to collaborators** in the **Avid MediaFiles folder** inside the **root of your mounted drive**.

***

## **3. Real-Time Collaboration with ShadeFS and Avid**

### **Step 1: Working on Shared Projects from Different Locations**

ShadeFS enables real-time collaboration, allowing multiple editors to work on the same project seamlessly.

* Since ShadeFS is cloud-based, team members can **access the same project and media instantly** without the need to sync files.
* This eliminates the need for emailing bins, manually copying media, or using external hard drives.
* Editors in different locations can work on the same project as though they were using a shared local server.

### **Step 2: Enabling Bin Locking for Collaborative Editing**

Since Avid's built-in bin locking is designed for Avid NEXIS, you’ll need third-party bin-locking software like **Mimiq or Osiris** to prevent conflicts when working in shared ShadeFS environments. This software tells Media Composer that the storage system being used is shared, prompting the creation of lock files when bins are in use.

* **Bin Locking Workflow:**
  * When a user opens a bin, it gets **locked** with a **red lock icon**.
  * Other users can **view** the bin but cannot make changes.
  * Once the editor **closes the bin**, it unlocks and is **available for editing** by others.
* **Using Separate User Directories:**
  * Each user should have their **own directory inside the project folder** (e.g., `/Users/Adam/`, `/Users/Reece/`).
  * This ensures that any newly created media files do not get overwritten by another user.

***

## **4. Optimizing Performance for Editing with ShadeFS**

### **Step 1: Streaming Media vs. Downloading Locally**

ShadeFS allows you to **stream high-resolution media directly from the cloud**, meaning you don’t need to download files before editing.

However, for smoother performance in low-bandwidth environments, consider **working with proxies**:

* **Option 1: Generate Proxies in Avid Media Composer**
  * Create proxies and store them in the `/Proxies` folder in ShadeFS.
  * Use **DNxHD LB or DNxHR LB** to reduce file sizes while maintaining quality.
* **Option 2: Use Pre-Generated ShadeFS Proxies**
  * If you’ve already uploaded high-resolution media, ShadeFS provides **edit-ready 1080p proxies**.
  * Right-click the media folder and select **Download Proxies** to get lightweight versions of your footage.
  * Attach proxies to your original media for faster editing.

### **Step 2: Set Up Avid’s Cache and Media Folders**

To prevent performance bottlenecks, configure Avid's **cache and temporary media storage** correctly:

* Set **Media Cache & Renders** to a fast **local drive** instead of the ShadeFS mount.
* Under **Settings > Media Creation**, specify the mounted Shade drive for media storage but **keep cache and renders local** for best performance.

***

## **5. Exporting and Delivering Your Final Project**

Once your edit is complete, you can **export directly to your mounted drive**, allowing easy access for team members, clients, or review purposes.

### **Step 1: Exporting Sequences**

* Go to **File > Output > Export to File**.
* Select **a folder inside your mounted drive** (e.g., `/Exports`).
* Choose **Avid DNxHR or ProRes** for high-quality exports.
* If you need to share smaller versions, use H.264 with a lower bitrate.

### **Step 2: Reviewing & Handing Off to Another Editor**

* If another team member needs to continue working on your project, ensure the **bin is closed** before they take over.
* The **lock icon will turn green**, indicating the bin is available for editing.
* Review exports by playing them back directly from your mounted drive without downloading.

***

## **Final Thoughts**

ShadeFS provides a **fast, reliable, and cloud-native** solution for editing with **Avid Media Composer**. Whether you’re working solo or collaborating across different locations, ShadeFS eliminates the need for **manual file transfers, syncing, or relinking media**.


# How to use Shade with Final Cut Pro

## How to use ShadeFS with Final Cut Pro

ShadeFS makes it easy to store Final Cut Pro Libraries and media files in a shared cloud storage drive that can be accessed from anywhere. Whether you're editing documentaries, social media content, YouTube videos, or episodic series, ShadeFS enables seamless remote collaboration without complicated file management processes.

This guide will walk you through the optimal setup for Final Cut Pro (FCP) on ShadeFS to ensure the best performance and workflow efficiency.

### 1. Setting Up Your Final Cut Pro Library on ShadeFS

To get started, you need to organize your ShadeFS mount for Final Cut Pro properly.

#### Step 1: Create Your Folder Structure

For an efficient workflow, set up the following folder structure inside your ShadeFS mount:

* `/FCP Projects/` – Store your Final Cut Pro libraries here
* `/FCP Archives/` – Store completed projects for future reference
* `/FCP Exports/` – Store your exported files here

Having a clear folder structure will help keep your projects organized and easy to locate.

#### Step 2: Create a New Final Cut Pro Library

1. Open Final Cut Pro
2. Go to File > New > Library
3. **Save the library inside the `/FCP Projects/` folder** on your mounted ShadeFS drive

### 2. Optimizing Final Cut Pro Preferences for ShadeFS

To ensure the best performance when working with cloud-based storage, adjust your Final Cut Pro settings as follows:

#### Step 1: Configure Media Import Settings

1. Go to Final Cut Pro > Preferences > Import
2. Select: "Copy to library storage location"
3. Check "Create optimized media" for smoother playback

**This ensures all media is stored within the library bundle**, avoiding symlinks that ShadeFS doesn't currently support.

#### Step 2: Configure Library Settings

1. In Final Cut Pro, select your library in the Libraries sidebar
2. Go to File > Library Properties (or press Command-J)
3. In the Library Properties window, click on "Modify Settings..."
4. For "Media", **ensure the "Inside library bundle" option is selected**
5. For "Motion Content", **ensure the "Inside library bundle" option is selected**
6. For "Cache", **ensure the "Inside library bundle" option is selected**

**Storing everything inside the library bundle** ensures compatibility with ShadeFS and eliminates dependency on symlinks.

### 3. Importing and Organizing Media

Now that your library and settings are optimized, you can import media into your Final Cut Pro library.

#### Step 1: Import Footage to Your Library

1. Open the Import window in Final Cut Pro (Command-I)
2. Navigate to the location of your media
3. Select your video clips, audio files, and graphics
4. Click Import
5. **Ensure that "Copy to library" is selected in the import options**

Since you've configured FCP to copy files to the library, **all media will be stored within the library bundle** on ShadeFS, eliminating symlinks and ensuring compatibility.

#### Step 2: Organize Your Media in Final Cut Pro

To keep your project organized:

* Use Events to categorize media (e.g., Interviews, B-Roll, Graphics)
* Use Keywords to tag clips for easier searching
* Create Smart Collections to automatically group clips based on criteria
* **Use Shade's AI search** to easily find clips across your libraries

### 4. Optimizing Performance for Cloud-Based Editing

ShadeFS allows you to edit directly from the cloud, but optimizing playback performance is essential for smooth editing.

#### Step 1: Use Proxy Media for Smoother Editing

For large projects or slower internet connections, use Final Cut Pro's Proxy Workflow:

1. Select your clips in the browser
2. Go to File > Transcode Media
3. Select "Create Proxy Media" using ProRes Proxy or H.264
4. **Ensure proxies are created inside the library bundle**
5. Toggle between proxy and full-resolution media as needed in the View menu

Alternatively, ShadeFS provides edit-ready 1080p proxies for media already uploaded:

1. Right-click any folder in Shade and select "Download Proxies"
2. Attach the proxies to the original files in Final Cut Pro for faster editing

#### Step 2: Use Optimized Media for High-Resolution Footage

If you're working with 4K or RAW footage, transcoding to Optimized Media (ProRes 422) can improve playback performance:

1. Select your clips in the browser
2. Go to File > Transcode Media > Create Optimized Media
3. **Ensure optimized media is stored inside the library bundle**

### 5. Exporting & Delivering Projects

Once your edit is complete, you can export directly to the mounted drive for collaboration, client review, or final delivery.

#### Step 1: Export a Master File

1. Go to File > Share > Master File
2. Select "Save to" and choose the `/FCP Exports/` folder inside ShadeFS
3. Choose ProRes 422 for high-quality exports or H.264 for web-ready files

#### Step 2: Share with Collaborators

If you need to share an exported video with collaborators or clients:

1. **Use Shade's built-in file-sharing** to generate a secure link
2. Share directly via email through the Shade interface
3. Store review files in a dedicated folder such as `/FCP Exports/ClientReview/`

#### Step 3: Archiving Projects

When the project is complete:

1. Save a copy of the Final Cut Pro library inside `/FCP Archives/` in the ShadeFS drive
2. Consider using Final Cut Pro's "Delete Generated Library Files" option to remove render files and other temporary files before archiving

### Final Thoughts

Using ShadeFS with Final Cut Pro allows you to edit high-resolution footage remotely with team members across locations.&#x20;

**Important Note:** Always keep your media inside the library bundle when working with ShadeFS to avoid symlink issues. This ensures your project remains fully compatible with the cloud storage system and accessible from any location.


# Mass migrating Data to Shade via Rclone

How to migrate data into Shade via Rclone

### Handling Data Migration and Transfers Efficiently

This is a guide for migrating large amounts of data into or out of your shade drive using rclone, a powerful open-source tool which supports many different sources.

### Downloading rclone

The Shade backend is now available natively as part of Rclone. You can download rclone from the [official rclone downloads page](https://rclone.org/downloads/).

### About rclone

[rclone](https://rclone.org/) is a powerful command-line program to manage files on cloud storage. It's often described as "rsync for cloud storage" and supports over 70 different cloud storage providers.

Common use cases for rclone include:

* **Syncing and backing up** files between your local system and cloud storage
* **Migrating data** from one cloud provider to another
* **Automating workflows** with scheduled syncs and backups
* **Managing large file transfers** with resume capability and bandwidth controls
* **Batch operations** for copying, moving, or deleting files across cloud services

With Shade's rclone backend, you can leverage all of rclone's powerful features to interact with your Shade drives directly from the command line.

### Configuration

Here is an example of making a Shade configuration.

First, [create a free account](https://app.shade.inc/) and choose a plan.

You will need to log in and get the `API Key` and `Drive ID` for your account from the settings section of your account and created drive respectively.

Now open a command prompt or terminal and navigate to where you downloaded that file, and run

`./rclone config` \
\
(If you are on a mac you will need to tell your computer that this file can be executed, so run&#x20;

`chmod +x rclone` )

Then follow this interactive process:

```
e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> n

Enter name for new remote.
name> Shade

Option Storage.
Type of storage to configure.
Choose a number from below, or type in your own value.
(Scroll along the list and find the Shade option, as of 11/5/25 it is 52)
[OTHER OPTIONS]
xx / Shade FS
   \ (shade)
[OTHER OPTIONS]
Storage> xx

Option drive_id.
The ID of your drive, see this in the drive settings. Individual rclone configs must be made per drive.
Enter a value.
drive_id> [YOUR_ID]

Option api_key.
An API key for your account.
Enter a value.
api_key> [YOUR_API_KEY]

Edit advanced config?
y) Yes
n) No (default)
y/n> n

Configuration complete.
Options:
- type: shade
- drive_id: [YOUR_ID]
- api_key: [YOUR_API_KEY]
Keep this "Shade" remote?
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d> y

```

### Example Workflow: Copying Files to Shade

Once you've configured your Shade remote, you can easily copy files from your local filesystem to Shade. Here's a common workflow:

#### Copying a Local Folder to Shade

To copy a folder from your local system to your Shade drive:

```bash
./rclone copy /path/to/local/folder Shade:/destination/folder
```

For example, to copy your "Projects" folder to Shade:

```bash
./rclone copy ~/Projects Shade:/Projects
```

This command will:

* Copy all files from your local Projects folder to Shade
* Preserve the folder structure
* Skip files that already exist and haven't changed
* Show progress during the transfer

#### Additional Useful Commands

**Sync a folder** (makes destination identical to source, including deletions):

```bash
./rclone sync ~/Projects Shade:/Projects
```

**Check what would be copied** without actually copying:

```bash
./rclone copy ~/Projects Shade:/Projects --dry-run
```

**Copy with progress and statistics**:

```bash
./rclone copy ~/Projects Shade:/Projects --progress --stats 1s
```

**List files in your Shade drive**:

```bash
./rclone ls Shade:/
```

### Standard Options

Here are the Standard options specific to shade (Shade FS).

**Note:** For most users, you only need to configure the `drive_id` and `api_key`. The advanced options below are for specific use cases and can be left at their defaults.

#### --shade-drive-id

The ID of your drive, see this in the drive settings. Individual rclone configs must be made per drive.

Properties:

* Config: drive\_id
* Env Var: RCLONE\_SHADE\_DRIVE\_ID
* Type: string
* Required: true

#### --shade-api-key

An API key for your account. You can find this under Settings > API Keys

Properties:

* Config: api\_key
* Env Var: RCLONE\_SHADE\_API\_KEY
* Type: string
* Required: true

### Advanced Options

Here are the Advanced options specific to shade (Shade FS).

#### --shade-endpoint

Endpoint for the service.

Leave blank normally.

Properties:

* Config: endpoint
* Env Var: RCLONE\_SHADE\_ENDPOINT
* Type: string
* Required: false

#### --shade-chunk-size

Chunk size to use for uploading.

Any files larger than this will be uploaded in chunks of this size.

Note that this is stored in memory per transfer, so increasing it will increase memory usage.

Minimum is 5MB, maximum is 5GB.

Properties:

* Config: chunk\_size
* Env Var: RCLONE\_SHADE\_CHUNK\_SIZE
* Type: SizeSuffix
* Default: 64Mi

#### --shade-encoding

The encoding for the backend.

See the [encoding section in the overview](https://github.com/shade-labs/docs/blob/main/overview/README.md#encoding) for more info.

Properties:

* Config: encoding
* Env Var: RCLONE\_SHADE\_ENCODING
* Type: Encoding
* Default: Slash,BackSlash,Del,Ctl,InvalidUtf8,Dot

#### --shade-description

Description of the remote.

Properties:

* Config: description
* Env Var: RCLONE\_SHADE\_DESCRIPTION
* Type: string
* Required: false

### API Routes Used by Rclone Integration

The following routes are used by the rclone integration to interface directly with the Shade filesystem. If you want to use these routes directly in your own applications, you'll need to first obtain a user token by calling the appropriate route from the 'Users' section in the 'Using the API' section of our documentation. Once you have the user token, pass it as a bearer token in your requests instead of your API key.

**Note:** The rclone backend handles authentication automatically using your API key - you only need to worry about user tokens if you're building custom integrations outside of rclone.

## GET /{drive-id}/fs/listdir

> List directory contents for a given drive path

```json
{"openapi":"3.1.1","info":{"title":"Shade Rclone Routes","version":"0.0.0"},"paths":{"/{drive-id}/fs/listdir":{"get":{"tags":["drives"],"parameters":[{"name":"drive","in":"path","required":true,"schema":{"type":"string"}},{"name":"path","in":"query","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string"}}],"operationId":"getByDriveFsListdir","summary":"List directory contents for a given drive path"}}}}
```

## GET /{drive-id}/fs/attr

> Get file or directory attributes/metadata

```json
{"openapi":"3.1.1","info":{"title":"Shade Rclone Routes","version":"0.0.0"},"paths":{"/{drive-id}/fs/attr":{"get":{"tags":["drives"],"parameters":[{"name":"drive","in":"path","required":true,"schema":{"type":"string"}},{"name":"path","in":"query","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string"}}],"operationId":"getByDriveFsAttr","summary":"Get file or directory attributes/metadata"}}}}
```

## GET /{drive-id}/fs/download

> Download a file with optional content disposition

```json
{"openapi":"3.1.1","info":{"title":"Shade Rclone Routes","version":"0.0.0"},"paths":{"/{drive-id}/fs/download":{"get":{"tags":["drives"],"parameters":[{"name":"drive","in":"path","required":true,"schema":{"type":"string"}},{"name":"path","in":"query","required":true,"schema":{"type":"string"}},{"name":"disposition_type","in":"query","required":true,"schema":{"default":"attachment","type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string"}}],"operationId":"getByDriveFsDownload","summary":"Download a file with optional content disposition"}}}}
```

## POST /{drive-id}/fs/mkdir

> Create a directory at the specified path

```json
{"openapi":"3.1.1","info":{"title":"Shade Rclone Routes","version":"0.0.0"},"paths":{"/{drive-id}/fs/mkdir":{"post":{"tags":["drives"],"parameters":[{"name":"drive","in":"path","required":true,"schema":{"type":"string"}},{"name":"path","in":"query","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string"}}],"operationId":"postByDriveFsMkdir","summary":"Create a directory at the specified path"}}}}
```

## POST /{drive-id}/fs/mkdir/batch

> Create multiple directories in a single request

```json
{"openapi":"3.1.1","info":{"title":"Shade Rclone Routes","version":"0.0.0"},"paths":{"/{drive-id}/fs/mkdir/batch":{"post":{"tags":["drives"],"parameters":[{"name":"drive","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{},"required":true},"operationId":"postByDriveFsMkdirBatch","summary":"Create multiple directories in a single request"}}}}
```

## POST /{drive-id}/fs/copy-file

> Copy a file from one path to another

```json
{"openapi":"3.1.1","info":{"title":"Shade Rclone Routes","version":"0.0.0"},"paths":{"/{drive-id}/fs/copy-file":{"post":{"tags":["drives"],"parameters":[{"name":"drive","in":"path","required":true,"schema":{"type":"string"}},{"name":"from","in":"query","required":true,"schema":{"type":"string"}},{"name":"to","in":"query","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string"}}],"operationId":"postByDriveFsCopy-file","summary":"Copy a file from one path to another"}}}}
```

## POST /{drive-id}/fs/move

> Move or rename a file or directory

```json
{"openapi":"3.1.1","info":{"title":"Shade Rclone Routes","version":"0.0.0"},"paths":{"/{drive-id}/fs/move":{"post":{"tags":["drives"],"parameters":[{"name":"drive","in":"path","required":true,"schema":{"type":"string"}},{"name":"from","in":"query","required":true,"schema":{"type":"string"}},{"name":"to","in":"query","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string"}}],"operationId":"postByDriveFsMove","summary":"Move or rename a file or directory"}}}}
```

## POST /{drive-id}/fs/delete

> Delete a file or directory at the specified path

```json
{"openapi":"3.1.1","info":{"title":"Shade Rclone Routes","version":"0.0.0"},"paths":{"/{drive-id}/fs/delete":{"post":{"tags":["drives"],"parameters":[{"name":"drive","in":"path","required":true,"schema":{"type":"string"}},{"name":"path","in":"query","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string"}}],"operationId":"postByDriveFsDelete","summary":"Delete a file or directory at the specified path"}}}}
```

## GET /{drive-id}/info/storage

> Fetch overall storage usage and limits

```json
{"openapi":"3.1.1","info":{"title":"Shade Rclone Routes","version":"0.0.0"},"paths":{"/{drive-id}/info/storage":{"get":{"tags":["drives"],"parameters":[{"name":"drive","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string"}}],"operationId":"getByDriveInfoStorage","summary":"Fetch overall storage usage and limits"}}}}
```

## GET /{drive-id}/info/upload

> Fetch upload configuration and constraints

```json
{"openapi":"3.1.1","info":{"title":"Shade Rclone Routes","version":"0.0.0"},"paths":{"/{drive-id}/info/upload":{"get":{"tags":["drives"],"parameters":[{"name":"drive","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string"}}],"operationId":"getByDriveInfoUpload","summary":"Fetch upload configuration and constraints"}}}}
```

## POST /{drive-id}/upload/multipart/part/{partNumber}

> Upload a specific part of a multipart upload

```json
{"openapi":"3.1.1","info":{"title":"Shade Rclone Routes","version":"0.0.0"},"paths":{"/{drive-id}/upload/multipart/part/{partNumber}":{"post":{"tags":["drives"],"parameters":[{"name":"drive","in":"path","required":true,"schema":{"type":"string"}},{"name":"partNumber","in":"path","required":true,"schema":{"type":"number"}},{"name":"token","in":"query","required":true,"schema":{"type":"string"}},{"name":"signAllEndpoints","in":"query","required":false,"schema":{"type":"string"}}],"operationId":"postByDriveUploadMultipartPartByPartNumber","summary":"Upload a specific part of a multipart upload"}}}}
```

## POST /{drive-id}/upload/multipart

> Initiate a multipart upload session

```json
{"openapi":"3.1.1","info":{"title":"Shade Rclone Routes","version":"0.0.0"},"paths":{"/{drive-id}/upload/multipart":{"post":{"tags":["drives"],"parameters":[{"name":"drive","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{},"required":true},"operationId":"postByDriveUploadMultipart","summary":"Initiate a multipart upload session"}}}}
```

## POST /{drive-id}/upload/multipart/complete

> Complete a multipart upload by finalizing parts

```json
{"openapi":"3.1.1","info":{"title":"Shade Rclone Routes","version":"0.0.0"},"paths":{"/{drive-id}/upload/multipart/complete":{"post":{"tags":["drives"],"parameters":[{"name":"drive","in":"path","required":true,"schema":{"type":"string"}},{"name":"token","in":"query","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{},"required":true},"operationId":"postByDriveUploadMultipartComplete","summary":"Complete a multipart upload by finalizing parts"}}}}
```


# Get Started with the Shade Python SDK

Easily manage and interact with your data in Shade via our Python SDK

Shade offers a full-featured python SDK that enables you to access any part of your workspace including files, metadata, members, searches, and more.&#x20;

### Installing the Shade Python SDK

Our SDK supports Python 3.8+.  Once you have successfully installed Python on your machine, you can install below:

```
pip install shade-python-sdk
```

### Authenticating with the Python SDK

You can obtain an API key for the Shade Python SDK from your workspace and generating a new key.

{% hint style="warning" %}
Please keep in mind that this is a secret key and should not be shared publically or stored in a public repository.&#x20;
{% endhint %}

<figure><img src="/files/tlENe0aZxr5brYveeoER" alt=""><figcaption><p>You can access your API Keys by going to Settings > API Keys</p></figcaption></figure>

### Initializing Shade

You can easily initialize the Shade SDK by initializing a Shade object. This will authenticate and authorize as your user - whatever you have access to, the object will have access to.&#x20;

```
API_KEY = 'sk....'
REMOTE_URL = 'https://api.shade.inc'
shade = Shade(remote_url=REMOTE_URL, api_key=API_KEY)
```


# Common Patterns

Here are a few common patterns and use cases for Shade that we have curated that you may find useful. Please check out [Get Started with the Shade Python SDK](/developers) before continuing with these patterns

### Get All Workspaces for Your User

```python
shade = Shade(remote_url=REMOTE_URL, api_key=API_KEY)
workspaces = shade.workspace.get_workspaces()
```

### Get All Drives of a Workspace

```python
workspace = shade.workspace.get_workspace_by_domain(WORKSPACE_DOMAIN)
drives = shade.drive.get_drives(workspace)
```

### List Files and Folders by Path

```python
assets = shade.asset.listdir_files(
    drive=drive, path=Path('/'), page=0, limit=100
) 

folders = shade.asset.listdir_folders(
        drive=drive.get('id'),
        path=Path('/'),
        page=0,
        limit=100,  # Returns the path of the folder
    )
print('folders', folders)

```

### Sharing a Folder

```python
def share_folder():
    if shade.share.share_asset(
        drive=drive,
        asset_path=Path(folders[0]),
        email='<enter email>',
        role=DriveRole.EDITOR,
        message='Hello',
    ):
        print('Shared folder with user')

```

### Sharing a File

For more information on roles check out [Workspace and Drive Permissions](/sharing-and-collaboration/workspace-and-drive-permissions)

```python
def share_file():
    if shade.share.share_asset(
        drive=drive,
        asset_path=Path(assets[0].get('path')),
        email='<enter email>',
        role=DriveRole.EDITOR,
        message='Hello you are invited',
    ):
        print('Shared file with user')

```

### Getting a Download URL for an Asset

```python
def get_signed_url():
    signed_url = shade.asset.get_signed_download_url(drive, asset.get('path'))
    print('signed_url', signed_url)
```

### Searching

```python
def search_in_folder():
    files = shade.asset.listdir_files(
        drive=drive,
        query=QueryBuilder()
        .set_query('city')
        .set_path('/38d862c3-7699-4ff0-b0fc-9be89c2f85af/shade_tests/places/nyc')
        .limit(50)
        .threshold(0)
        .finish(),
    )

    print(len(files))
```

More patterns can be found in our examples [here](https://github.com/shade-labs/shade-python-sdk/tree/main/examples)


# Syncing & reacting to file changes

### Sync

#### This docs page is for you if you

* Are trying to keep the state of your drive file tree in sync with something else
  * "Something else" being a database, a spreadsheet, a local file system, or a remote file system
* Want to make some automation off of a created/deleted/moved file or folder

#### This page is NOT for you if

* You're not a developer — we'll be making an easier-to-use version of this soon

### Theory

The most reliable way to sync two systems is to give references to the changes over time, allowing the client\
trying to perform the sync to acknowledge, replay, apply the diff before ensuring database integrity\
and moving onto the next change

An example of this is like in git VCS where there are a series of commits and the difference between\
two commits is given by a "patch" if you want to end up with the current state of the tree you apply\
these patches to your local system which will add together to end up with the resultant state\
(ok not exactly like that, but it works in this example).

The sync is similar though in this case where you query our servers for a patch, if there's a new patch\
you apply that patch to your system — at the end of the day when you sum everything it will be correct.

### How to

#### Getting the patch diff

1. Get an API key
2. Set up your listener system to periodically use that key to redeem a ShadeFS JWT using the route `GET https://api.shade.inc/workspaces/drives/{drive_id}/shade-fs-token`
   * This will return a JWT that is valid for the next 5 minutes
3. Now you can use that JWT to see the current "head" for your drive, this is a hash that represents the current state
   * Do this by calling `GET https://fs.shade.inc/{drive_id}/heads/current`, with your JWT as the "Authorization" header — this will return a hash like `972d06bb83b2979f7bd5d2e1e98aa0da2b763ffa7a5a408fee27c1d561e45754`
4. To get your first patch diff you can get the lifetime history of the drive
   * Do this by calling `GET https://fs.shade.inc/{drive_id}/heads/compare?to=your_hash_you_got`
   * This will give back a JSON
5. As heads come in, the result returned by `heads/current`, compare that against the previous patch head you applied,\
   if they're different, then perform the patch diff

#### Applying the patch diff

Now that you have a diff it can be parsed into changes fairly easily\
An entry for the "blob state" must be kept as well if its "null" "draft" or "main"\
Null means an empty file, draft means a file thats still being uploaded and is inaccessible and main means a fully uploaded and accessible file

1. First apply the "deleted files" in the deletedFiles entry of the diff
2. Next apply the renames in the "renames" entry of the diff by renaming files in the "from" to "to"
3. Create the files as main if they're in the "createdMainFiles"
4. Upsert the files as draft if they're in the "mainOrNullToDraftFiles"
5. Upsert the files as null if they're in the "draftOrMainToNullFiles"
6. Delete and reinsert the asset if it's in the "modifiedMainFiles" or in "modifiedDraftFiles"

You should end up with all of your files in sync

Dealing with folder creation is a little more difficult, we recommend just creating the folder if it doesn't exist\
and after delete if a folder goes empty then you can delete the folder. Sometimes order matters for folders like if you\
move a folder out then delete the parent if you apply the operations wrong its possible to accidentally delete all files\
under the directory and then "attempt and fail" to move the files in it out of it — so avoiding the problem all together\
is generally better by never having empty folders.


# Webhooks

Webhooks are coming soon in the next month

Shade sends webhook events to notify your application when resources are created, updated, or deleted across your workspace. You can subscribe to specific event types to build integrations, sync external systems, or trigger custom workflows.

### Accessing Webhooks from the App and Opening the Webhooks Dashboard

Shade offers a full webhooks dashboard that you can easily configure and manage all of your webhook endpoints.

<figure><img src="/files/91Y4lmkHl1qMrpIDc9qH" alt=""><figcaption></figcaption></figure>

### Creating an Initial Webhook Response Endpoint

Once you have opened the dashboard, you can configure a new endpoint under the "Endpoints" section. From there, you can subscribe to any of our events and send the output to your endpoint URL for further processing.&#x20;

<figure><img src="/files/gj1QbYorm68ogXtrcU2V" alt=""><figcaption></figcaption></figure>

### Event Format

Every webhook delivers a JSON payload with a consistent envelope structure:

```json
{
  "event_type": "resource_type.action",
  "resource": {
    "type": "resource_type",
    "id": "uuid"
  },
  "user": {
    "id": "uuid",
    "email": "jane@example.com",
    "name": "Jane Smith"
  },
  "workspace": {
    "id": "uuid",
    "name": "My Workspace",
    "domain": "myworkspace"
  },
  "drive": {
    "id": "uuid",
    "name": "My Drive",
    "identifier": "my-drive"
  },
  "payload": {}
}
```

### Current Running List of Planned / Supported Webhooks

{% hint style="info" %}
You can take a look at all of the endpoints available via the Webhooks dashboard accesible via our app and heading to `Event Catalog`
{% endhint %}

| Field        | Type             | Description                                                                            |
| ------------ | ---------------- | -------------------------------------------------------------------------------------- |
| `event_type` | `string`         | The event identifier in `resource_type.action` format.                                 |
| `resource`   | `object`         | The resource type and ID the event relates to.                                         |
| `user`       | `object \| null` | The user who performed the action. `null` for system-initiated events (e.g. indexing). |
| `workspace`  | `object`         | The workspace the event occurred in.                                                   |
| `drive`      | `object \| null` | The drive the event occurred in. `null` for workspace-level events.                    |
| `payload`    | `object`         | The full resource data at the time of the event. Fields vary by resource type.         |

***

### Available Events

#### Assets

Events triggered by file system changes detected during drive indexing. The `user` field is `null` for these events since they are system-initiated.

| Event            | Description                                                                    |
| ---------------- | ------------------------------------------------------------------------------ |
| `asset.created`  | A new file was detected in the drive.                                          |
| `asset.modified` | An existing file was modified.                                                 |
| `asset.moved`    | A file was moved or renamed. `payload` includes `path` and `to_path`.          |
| `asset.deleted`  | A file was deleted from the drive.                                             |
| `asset.uploaded` | A file was uploaded to the drive.                                              |
| `asset.updated`  | A metadata attribute was updated on an asset. Fired once per attribute change. |

#### Asset Processing

Events fired when background processing jobs complete. The `user` field is `null` for these events.

| Event                     | Description                                      |
| ------------------------- | ------------------------------------------------ |
| `preview.completed`       | Preview image generation finished for an asset.  |
| `proxy.completed`         | Video proxy generation finished for an asset.    |
| `audio_proxy.completed`   | Audio proxy generation finished for an asset.    |
| `transcription.completed` | Transcription finished for an audio/video asset. |

#### Collections

| Event                      | Description                                                 |
| -------------------------- | ----------------------------------------------------------- |
| `collection.created`       | A new collection was created (includes duplications).       |
| `collection.updated`       | A collection's name, description, or settings were changed. |
| `collection.deleted`       | A collection was deleted.                                   |
| `collection.items_added`   | Assets were added to a collection.                          |
| `collection.items_removed` | Assets were removed from a collection.                      |

#### Comments

| Event                | Description                                     |
| -------------------- | ----------------------------------------------- |
| `comment.created`    | A new comment or reply was created on an asset. |
| `comment.updated`    | A comment's text was edited.                    |
| `comment.deleted`    | A comment was deleted.                          |
| `comment.resolved`   | A comment thread was marked as resolved.        |
| `comment.unresolved` | A resolved comment thread was reopened.         |
| `comment.reacted`    | A reaction was added to a comment.              |

#### Public Links

| Event                 | Description                                                                                        |
| --------------------- | -------------------------------------------------------------------------------------------------- |
| `public_link.created` | A new public share link was created.                                                               |
| `public_link.updated` | A public share link's settings were changed (permissions, password, expiration, view limit, etc.). |
| `public_link.deleted` | A public share link was removed.                                                                   |

#### Drive Members

| Event                  | Description                                                |
| ---------------------- | ---------------------------------------------------------- |
| `drive_invite.created` | A user was invited to a drive or granted access to a path. |
| `drive_invite.updated` | A user's drive role or path permissions were changed.      |
| `drive_invite.deleted` | A user was removed from a drive or lost access to a path.  |

#### Workspace Members

| Event                      | Description                            |
| -------------------------- | -------------------------------------- |
| `workspace_invite.created` | A user was invited to the workspace.   |
| `workspace_invite.updated` | A user's workspace role was changed.   |
| `workspace_invite.deleted` | A user was removed from the workspace. |

#### Drives

| Event           | Description                               |
| --------------- | ----------------------------------------- |
| `drive.created` | A new drive was created in the workspace. |


# Writing your own uploader

If you're writing an app on top of Shade, this is how you upload files.

We've built the Shade uploader to be as easy as possible to integrate into your own app while maximizing upload speeds.

## Multipart Uploads

We recommend always using multipart uploads. We have a single part API but from S3 limitations, it only supports files up to 5GB. Multipart uploads support files up to 5TB.

## Steps

### 1. Make sure you have a valid ShadeFS token. All calls will require this.

```typescript
const resp = await axios.get(`https://api.shade.inc/workspaces/drives/${driveId}/shade-fs-token`, {
    headers: {
        Authorization: apiKey,
    },
})
```

This gives back a token valid for some amount of time. We recommend decoding it manually and reading the `exp` field to know when it expires:

```typescript
const MUST_BE_LONGER_THAN_TO_BE_VALID = 240

const exp = jwtDecode(tokenJWT).exp
if (!exp) {
    throw new Error("No exp attribute in decoded jwt")
}

if (exp - Date.now() / 1000 < MUST_BE_LONGER_THAN_TO_BE_VALID) {
    // Token expires too soon, fetch another one
}
```

{% hint style="warning" %}
A very common mistake is continuing to use a token after it has expired, especially if you redeem beforehand and then take a long time to upload. We recommend a utility that on each usage checks the expiry on each usage. You'll see that here as `tokenCacher.fetchToken()`.
{% endhint %}

### 2. Make sure that you've created the directories that you want to upload to. This call looks something like this:

```typescript
await axios.post(
    `https://fs.shade.inc/${driveId}/fs/mkdir`, {}, {
        headers: {
            Authorization: `Bearer ${(await tokenCacher.fetchToken())}`,
        },
        params: {
            email,
            path: directory,
            drive: driveId,
        }
})
```

Directories are created recursively, so if you pass `/a/b/c/d.txt` and only `/a` exists, it will create `/b`, `/c`.

### 3. Initiate the multipart upload to the destination path. This call looks something like this:

Decide on a part size! We've found 64-128mb work well for most end users

```typescript
export type InitiateMultipartResponse = {
    uploadId: string;
    partSize: number; // Server confirmed part size
    token: string; // finish token used for part presign + completion
};

const PART_SIZE = 64 * 1024 * 1024; // 64MB

const data = await axios.post(
    `https://fs.shade.inc/${drive}/upload/multipart`,
    { path, PART_SIZE },
    {
        headers: { Authorization: `Bearer ${await tokenCacher.fetchToken()}` },
    }
);
return resp.data as InitiateMultipartResponse;
```

### 4. Now we can work on the parts. For each part, you will need to presign it first:

```typescript
export type PresignedPart = {
    url: string;
    headers?: PresignedHeaders;
};

const resp = await axios.post(
    `https://fs.shade.inc/${drive}/upload/multipart/part/${partNumber}`,
    {},
    {
        headers: { Authorization: `Bearer ${token}` },
        params: { token: finishToken },
    }
);
return resp.data as PresignedPart;
```

### 5. Now upload the part to the presigned URL. This call looks something like this:

```typescript
// Load it into memory - this is the Bun API, node and web are slightly different.
// Streaming from disk into the requeest for memory usage! I recommend not loading the entire chunk into memory at once but this
//  runs on our transfer machine that has a lot of RAM but shouldn't be done on end user's machines especailly for
//  concurrent chunk uploads the memory can explode.
const buffer = await Bun.file(filePath).slice(start, endExclusive).arrayBuffer()

const presigned = presignResponse as PresignedPart;

// Post the data and gather the ETag
const resp = await axios.put(presigned.url, buffer, {
    headers: {
        "Content-Length": chunkLen.toString(),
        ...(presigned.headers ?? {}),
    },
    maxBodyLength: Infinity,
    maxContentLength: Infinity,
    validateStatus: (s) => s >= 200 && s < 300,
});

const etag = resp.headers["etag"] as string | undefined;
if (!etag) throw new Error("Missing ETag on UploadPart response");
return etag;
```

### 6. Now just complete the upload

```typescript
const resp = await axios.post(
    `https://fs.shade.inc/${drive}/upload/multipart/complete`,
    { parts },
    {
        headers: { Authorization: `Bearer ${token}` },
        params: { token: finishToken },
    }
);

if (resp.status >= 200 && resp.status < 300) return;
throw new Error(`completeMultipart ${resp.status}`);
```

## Example

Putting it all together, you get something like this to control your upload.

You can make it faster by parallelizing this function and parallelizing the part uploads.

```typescript
/*
Here is a portion of from our own uploader tool, written in Typescript using a Bun runtime.
The below script is the driver for the above functions.
 */
export async function uploadMultipart(
    tokenCacher: TokenCacher,
    localPath: string,
    destPath: string,
) {
    const token = await tokenCacher.fetchToken();
    const decoded: any = jwtDecode(token);
    const drive: string = decoded.aud;
    const userEmail: string = decoded.sub;

    if (!userEmail || !drive || Array.isArray(drive)) throw new Error("Bad token: missing sub/aud");

    // Ensure destination directories exist server-side
    await makeDirectories(tokenCacher, drive, userEmail, destPath);

    // File info
    const {size: fileSize} = await promises.stat(localPath);
    const totalParts = Math.ceil(fileSize / PART_SIZE);

    // 1) Initiate
    const init = await initiateMultipartUpload(tokenCacher, drive, destPath, PART_SIZE);
    const finishToken = init.token;

    // 2) Upload each part sequentially
    const completed: CompletePart[] = [];
    for (let partNumber = 1; partNumber <= totalParts; partNumber++) {
        const start = (partNumber - 1) * PART_SIZE;
        const endExclusive = Math.min(start + PART_SIZE, fileSize);

        const presigned = await presignPart(tokenCacher, drive, partNumber, finishToken);

        const etag = await uploadPart(presigned, localPath, start, endExclusive);

        completed.push({PartNumber: partNumber, ETag: etag});
    }

    // 3) Complete
    await completeMultipart(tokenCacher, drive, finishToken, completed);
}
```


# Intro

The python SDKs are simply a wrapper over the underlying RESTful API. Excluding uploading, all actions in Shade are RESTful calls. This includes operations like making/moving directories, updating dynamic views, exporting things to CSV, making drives and editing permissions.

## API Key

API keys can be generated in the web or desktop app. The API key has the same permissions as the account it is generated on. This means the API key will have access to the same things that you do when logged in with that account on the UI. All calls (other than to public endpoints like `/`) require the API key to be sent as well, otherwise Shade will give a permission error.

To generate the API key

1. In the app click `settings` at the top left
2. Underneath "My account" select the option for `API keys`
3. Select the purple `Generate new key`
4. Give your key a name as a label and set an expiration if desired
5. Continue, then **make sure to copy the API key shown in purple to a safe place** it will not be shown again once the popup is closed

The API key is always provided in the `Authorization` header as `Authorization: sk_...`

## Endpoint

All Shade API calls in scope of this document are made to

```
https://api.shade.inc
```

## Authorization Header&#x20;

Shade uses the Authorization header instead of an API key URL parameter. This means you should always have the following header (and additional headers if needed):&#x20;

```json
{
    "Authorization": "sk_<your key>"   
}
```

{% hint style="info" %}
There is no need to put Authorization Bearer, just put the secret key directly there!
{% endhint %}

## A simple example request

Let's do a request to list workspaces that our account has access to. This can be doing any client that sends HTTP requests.

I'll give this example using cURL in the command line, but tools like postman can also be used or tools like `requests` in python. Make sure to replace the `sk_...` with your actual key.

```bash
curl -H "Authorization: sk_..." https://api.shade.inc/workspaces
```

This gives back something that looks like this

```json
[
  {
    "id":"019d8690-fa10-45f3-b10c-0b0af64674fc"
  },
  "name":"Acme Studios",
  "description":"",
  "domain":"demo",
  "thumbnail":"https://firebasestorage...."
```

### Export a view as CSV (more complex)

Often people want to export the view they have as a CSV so they can use this in other tools. This is easy over the API with a few pieces of information

1. The drive id
2. The view id

Just replace those two attributes in the below call.

```bash
curl -H "Authorization: sk_..." "https://api.shade.inc/dynamic-views/<the view id>/exports/csv?drive_id=<the drive id>&os=Darwin&timezone=America/New_York"
```

This gives back something like this. In my case this view doesn't have tags, but any metadata you have in this view will appear here

```csv
File Name,Clip Directory
concert_broll_1.mp4,/Volumes/final_cut_happy/final cut.fcpbundle/2-5-25/Original Media
concert_broll_2.mov,/Volumes/final_cut_happy/final cut.fcpbundle/2-5-25/Original Media
```

Operations like this can also be done via our python SDK, but this is what the raw calls look like under the hood!


# Metadata Guide

A beginner's guide to creating and managing metadata attributes and options using the Shade API.

## Prerequisites

* Shade API key (stored in environment variable `SHADE_KEY`)
* Drive ID for your Shade workspace
* Basic understanding of REST APIs and curl commands

## Base Information

* **API Base URL**: `https://api.shade.inc/v1`
* **Authentication**: Include your API key in the Authorization header
* **Content Type**: Always use `application/json` for POST/PUT requests

## 1. Getting Metadata Attributes

First, you'll want to see what metadata attributes already exist in your drive.

### API Endpoint

```
GET /workspaces/drives/{DRIVE_ID}/metadata
```

### Curl Command

```bash
curl -X GET "https://api.shade.inc/v1/workspaces/drives/YOUR_DRIVE_ID/metadata" \
  -H "Authorization: YOUR_SHADE_API_KEY"
```

### Response

This returns an array of metadata attributes, each containing:

* `id`: The metadata ID (needed for updates)
* `name`: The attribute name
* `type`: The attribute type (text, singleselect, multiselect, etc.)
* `options`: Array of options for select-type fields

## 2. Creating/Updating Options for Select Attributes

To add new options to single-select or multi-select metadata attributes, you update the entire attribute.

### API Endpoint

```
PUT /workspaces/drives/{DRIVE_ID}/metadata/{METADATA_ID}
```

### Curl Command

```bash
curl -X PUT "https://api.shade.inc/v1/workspaces/drives/YOUR_DRIVE_ID/metadata/METADATA_ID" \
  -H "Authorization: YOUR_SHADE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Your Attribute Name",
    "automated": false,
    "prompt": "",
    "default": "",
    "add_new_options": true,
    "options": [
      {
        "id": "550e8400-e29b-41d4-a716-446655440000",
        "name": "Option 1",
        "color": "blue",
        "user": true
      },
      {
        "id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
        "name": "Option 2",
        "color": "green",
        "user": true
      }
    ]
  }'
```

### Important Notes for Options:

* **Include ALL options**: You must include existing options plus new ones, or existing options will be removed
* **Generate UUIDs**: Each option needs a unique UUID (use `uuidgen` or online generators)
* **Available colors**: `pink`, `red`, `yellow`, `light_green`, `dark_green`, `light_blue`, `purple`
* **Set user to true**: This indicates user-created options

## 3. Setting Metadata Values on Assets

Once you have your metadata attributes and options set up, you can assign values to specific assets.

### API Endpoint

```
PUT /assets/{ASSET_ID}/metadata/{METADATA_ID}/value
```

### Curl Commands by Metadata Type

#### For Text Metadata:

```bash
curl -X PUT "https://api.shade.inc/v1/assets/ASSET_ID/metadata/METADATA_ID/value" \
  -H "Authorization: YOUR_SHADE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "drive_id": "YOUR_DRIVE_ID",
    "metadata_attribute_value": "Some text value"
  }'
```

#### For Single Select Metadata:

```bash
curl -X PUT "https://api.shade.inc/v1/assets/ASSET_ID/metadata/METADATA_ID/value" \
  -H "Authorization: YOUR_SHADE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "drive_id": "YOUR_DRIVE_ID",
    "metadata_attribute_value": "option-uuid-here"
  }'
```

#### For Multi-Select Metadata:

```bash
curl -X PUT "https://api.shade.inc/v1/assets/ASSET_ID/metadata/METADATA_ID/value" \
  -H "Authorization: YOUR_SHADE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "drive_id": "YOUR_DRIVE_ID",
    "metadata_attribute_value": ["option-uuid-1", "option-uuid-2", "option-uuid-3"]
  }'
```

## 4. Common Workflow

1. **Get existing metadata attributes** to see what's already available
2. **Create/update options** for select-type attributes as needed
3. **Set metadata values** on your assets using the appropriate value format

## 5. Value Format Reference

| Metadata Type | Value Format          | Example                                  |
| ------------- | --------------------- | ---------------------------------------- |
| Text          | String                | `"My text value"`                        |
| Single Select | Option UUID           | `"550e8400-e29b-41d4-a716-446655440000"` |
| Multi-Select  | Array of Option UUIDs | `["uuid1", "uuid2", "uuid3"]`            |

## 6. Tips and Best Practices

* Always get the current metadata attributes first to understand the existing structure
* When updating options, include all existing options to avoid accidentally removing them
* Use meaningful names for your options
* Generate proper UUIDs for new options (don't make them up)
* Test with a single asset before bulk operations
* Handle API errors gracefully in your scripts

## 7. Error Handling

Common errors you might encounter:

* **401 Unauthorized**: Check your API key
* **404 Not Found**: Verify your drive ID, asset ID, or metadata ID
* **400 Bad Request**: Check your JSON format and required fields
* **422 Unprocessible Entity**: Verify the metadata value format matches the attribute type

## Example: Complete Workflow

```bash
# 1. Get metadata attributes
curl -X GET "https://api.shade.inc/v1/workspaces/drives/YOUR_DRIVE_ID/metadata" \
  -H "Authorization: YOUR_API_KEY"

# 2. Add options to a select attribute (replace METADATA_ID with actual ID)
curl -X PUT "https://api.shade.inc/v1/workspaces/drives/YOUR_DRIVE_ID/metadata/METADATA_ID" \
  -H "Authorization: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Project Status",
    "automated": false,
    "prompt": "",
    "default": "",
    "add_new_options": true,
    "options": [
      {
        "id": "550e8400-e29b-41d4-a716-446655440000",
        "name": "In Progress",
        "color": "yellow",
        "user": true
      },
      {
        "id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
        "name": "Completed",
        "color": "green",
        "user": true
      }
    ]
  }'

# 3. Set metadata value on an asset
curl -X PUT "https://api.shade.inc/v1/assets/YOUR_ASSET_ID/metadata/METADATA_ID/value" \
  -H "Authorization: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "drive_id": "YOUR_DRIVE_ID",
    "metadata_attribute_value": "550e8400-e29b-41d4-a716-446655440000"
  }'
```

Replace `YOUR_DRIVE_ID`, `YOUR_API_KEY`, `METADATA_ID`, and `YOUR_ASSET_ID` with your actual values.


# Public

## GET /public/app/{os\_}/{arch}/{version}

> Get the latest version of the app as a download url 307

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/public/app/{os_}/{arch}/{version}":{"get":{"tags":["public"],"summary":"Get the latest version of the app as a download url 307","operationId":"get_latest_app_version_public_app__os____arch___version__get","parameters":[{"name":"os_","in":"path","required":true,"schema":{"$ref":"#/components/schemas/OperatingSystem"}},{"name":"arch","in":"path","required":true,"schema":{"type":"string","title":"Arch"}},{"name":"version","in":"path","required":true,"schema":{"type":"string","title":"Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"OperatingSystem":{"type":"string","enum":["Windows","Linux","Debian","Fedora","Darwin"],"title":"OperatingSystem","description":"Operating System Enum from the result of platform.system()"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## GET /public/drive-templates

> Get all public drive templates

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/public/drive-templates":{"get":{"tags":["public"],"summary":"Get all public drive templates","operationId":"get_all_public_drive_templates_route_public_drive_templates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/DriveTemplateDTO"},"type":"array","title":"Response Get All Public Drive Templates Route Public Drive Templates Get"}}}},"404":{"description":"Not found"}}}}},"components":{"schemas":{"DriveTemplateDTO":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"dynamic_views":{"items":{"$ref":"#/components/schemas/DynamicView"},"type":"array","title":"Dynamic Views"},"metadata_attributes":{"items":{"$ref":"#/components/schemas/MetadataAttribute-Output"},"type":"array","title":"Metadata Attributes"}},"type":"object","required":["id","name","description","dynamic_views","metadata_attributes"],"title":"DriveTemplateDTO"},"DynamicView":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"filters":{"anyOf":[{"items":{"$ref":"#/components/schemas/AddedFilterForStorage"},"type":"array"},{"type":"null"}],"title":"Filters"},"columns":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Columns"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"is_locked":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Locked"},"is_private":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Private"},"display_settings":{"anyOf":[{"$ref":"#/components/schemas/DynamicViewDisplaySettings"},{"type":"null"}]},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"icon_type":{"anyOf":[{"$ref":"#/components/schemas/DynamicViewIconType"},{"type":"null"}]},"sort":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},"type":"object","required":["id","name"],"title":"DynamicView"},"AddedFilterForStorage":{"properties":{"id":{"title":"Id"},"options":{"items":{"$ref":"#/components/schemas/FilterOption"},"type":"array","title":"Options"},"clause":{"$ref":"#/components/schemas/FilterClauseVal"},"ignore_options":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ignore Options"}},"type":"object","required":["id","options","clause"],"title":"AddedFilterForStorage"},"FilterOption":{"properties":{"client_val":{"type":"string","title":"Client Val"},"server_val":{"type":"string","title":"Server Val"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"}},"type":"object","required":["client_val","server_val"],"title":"FilterOption"},"FilterClauseVal":{"type":"string","enum":["is","is any of","is not","is true","is false","is not true","is not false","has","doesn't have","before","after","between","is directly in","is under","is not in","<","< any of","<=","<= any of",">","> any of",">=",">= any of","hasn't started","in progress of","completed","failed","includes","does not include","contains","does not contain","does not start with","starts with","end with","is empty","is not empty"],"title":"FilterClauseVal","description":"Filter Clause Values Enum. Contains all filter clause values"},"DynamicViewDisplaySettings":{"properties":{"card_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Card Size"},"thumbnail_view":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail View"},"view":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"View"},"metadata_attribute_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Metadata Attribute Ids"},"flatten_directories":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Flatten Directories"}},"type":"object","title":"DynamicViewDisplaySettings"},"DynamicViewIconType":{"type":"string","enum":["color","emoji","url"],"title":"DynamicViewIconType"},"MetadataAttribute-Output":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"keys":{"items":{"type":"string"},"type":"array","title":"Keys"},"value_type":{"$ref":"#/components/schemas/MetadataAttributeType"},"description":{"type":"string","title":"Description"},"location":{"$ref":"#/components/schemas/MetadataAttributeLocation"},"default":{"anyOf":[{},{"type":"null"}],"title":"Default"},"group":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group"},"options":{"anyOf":[{"items":{"$ref":"#/components/schemas/MetadataAttributeSelectOption"},"type":"array"},{"type":"null"}],"title":"Options"},"add_new_options":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Add New Options","default":true},"restrict_to_types":{"anyOf":[{"items":{"$ref":"#/components/schemas/AssetType"},"type":"array"},{"type":"null"}],"title":"Restrict To Types"},"automated":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Automated","default":false},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt"},"archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Archived","default":false},"locked":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Locked","default":false}},"type":"object","required":["id","name","keys","value_type","description","location"],"title":"MetadataAttribute"},"MetadataAttributeType":{"type":"string","enum":["str","single_select","multi_select","float","int","bool","datetime","rating"],"title":"MetadataAttributeType"},"MetadataAttributeLocation":{"type":"string","enum":["system","custom","asset"],"title":"MetadataAttributeLocation"},"MetadataAttributeSelectOption":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"color":{"$ref":"#/components/schemas/MetadataAttributeSelectOptionColor"},"user":{"type":"boolean","title":"User"},"archived":{"type":"boolean","title":"Archived","default":false}},"type":"object","required":["id","name","color","user"],"title":"MetadataAttributeSelectOption"},"MetadataAttributeSelectOptionColor":{"type":"string","enum":["pink","red","yellow","light_green","dark_green","light_blue","dark_blue","purple"],"title":"MetadataAttributeSelectOptionColor"},"AssetType":{"type":"string","enum":["IMAGE","VIDEO","AUDIO","DOCUMENT","HDR","HDRI","PHOTOSHOP","ILLUSTRATOR","EXR","OBJECT","VECTOR","OTHER","MAYA","MAX","BLENDER","HOUDINI","UNREAL","UNITY","AFTER_EFFECTS","MOGRT"],"title":"AssetType"}}}}
```


# User

## GET /user

> Get user data for a user id

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/user":{"get":{"tags":["user"],"summary":"Get user data for a user id","operationId":"get_user_route_user_get","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_user_route_user_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/UserMetadataDTO"},{"type":"null"}],"title":"Response Get User Route User Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_user_route_user_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_user_route_user_get"},"UserMetadataDTO":{"properties":{"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"onboarding_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Onboarding Status"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"},"last_accessed":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Accessed"},"occupation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Occupation"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"referral_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Referral Source"},"phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone Number"},"used_desktop_app":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Used Desktop App"},"client_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Client Metadata"},"id":{"type":"string","format":"uuid","title":"Id"},"is_shade_admin":{"type":"boolean","title":"Is Shade Admin"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"total_roots":{"type":"integer","title":"Total Roots"},"plan_status":{"$ref":"#/components/schemas/UserPlanStatus"},"plan":{"$ref":"#/components/schemas/UserPlan"},"asset_limit":{"type":"integer","title":"Asset Limit"},"total_indexed":{"type":"integer","title":"Total Indexed"},"total_storage":{"type":"integer","title":"Total Storage"}},"type":"object","required":["id","is_shade_admin","created_at","total_roots","plan_status","plan","asset_limit","total_indexed","total_storage"],"title":"UserMetadataDTO"},"UserPlanStatus":{"type":"string","enum":["incomplete","incomplete_expired","trialing","active","past_due","canceled","unpaid","guest"],"title":"UserPlanStatus"},"UserPlan":{"type":"string","enum":["free","guest","pro","pro-life"],"title":"UserPlan"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## PUT /user

> Modify user data

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/user":{"put":{"tags":["user"],"summary":"Modify user data","operationId":"modify_user_user_put","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_modify_user_user_put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserMetadataDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_modify_user_user_put":{"properties":{"user":{"$ref":"#/components/schemas/UpdatableUserMetadataDTO","title":"Updated user","description":"The updated user object"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["user"],"title":"Body_modify_user_user_put"},"UpdatableUserMetadataDTO":{"properties":{"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"onboarding_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Onboarding Status"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"},"last_accessed":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Accessed"},"occupation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Occupation"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"referral_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Referral Source"},"phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone Number"},"used_desktop_app":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Used Desktop App"},"client_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Client Metadata"}},"type":"object","title":"UpdatableUserMetadataDTO"},"UserMetadataDTO":{"properties":{"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"onboarding_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Onboarding Status"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"},"last_accessed":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Accessed"},"occupation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Occupation"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"referral_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Referral Source"},"phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone Number"},"used_desktop_app":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Used Desktop App"},"client_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Client Metadata"},"id":{"type":"string","format":"uuid","title":"Id"},"is_shade_admin":{"type":"boolean","title":"Is Shade Admin"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"total_roots":{"type":"integer","title":"Total Roots"},"plan_status":{"$ref":"#/components/schemas/UserPlanStatus"},"plan":{"$ref":"#/components/schemas/UserPlan"},"asset_limit":{"type":"integer","title":"Asset Limit"},"total_indexed":{"type":"integer","title":"Total Indexed"},"total_storage":{"type":"integer","title":"Total Storage"}},"type":"object","required":["id","is_shade_admin","created_at","total_roots","plan_status","plan","asset_limit","total_indexed","total_storage"],"title":"UserMetadataDTO"},"UserPlanStatus":{"type":"string","enum":["incomplete","incomplete_expired","trialing","active","past_due","canceled","unpaid","guest"],"title":"UserPlanStatus"},"UserPlan":{"type":"string","enum":["free","guest","pro","pro-life"],"title":"UserPlan"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## POST /user/profile/avatar/upload-url

> Create an avatar for a user

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/user/profile/avatar/upload-url":{"post":{"tags":["user"],"summary":"Create an avatar for a user","operationId":"user_create_avatar_upload_url_user_profile_avatar_upload_url_post","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_user_create_avatar_upload_url_user_profile_avatar_upload_url_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response User Create Avatar Upload Url User Profile Avatar Upload Url Post"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_user_create_avatar_upload_url_user_profile_avatar_upload_url_post":{"properties":{"extension":{"type":"string","enum":["png","jpg","jpeg"],"title":"Extension","description":"The extension type of the avatar"},"size":{"title":"Size","description":"Size of the avatar"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["extension","size"],"title":"Body_user_create_avatar_upload_url_user_profile_avatar_upload_url_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## POST /user/profile/avatar/complete

> Confirm uploading an avatar for a user

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/user/profile/avatar/complete":{"post":{"tags":["user"],"summary":"Confirm uploading an avatar for a user","operationId":"user_complete_avatar_user_profile_avatar_complete_post","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_user_complete_avatar_user_profile_avatar_complete_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_user_complete_avatar_user_profile_avatar_complete_post":{"properties":{"download_url":{"title":"Download url","description":"The download url"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["download_url"],"title":"Body_user_complete_avatar_user_profile_avatar_complete_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## POST /user/share

> Create user for share to perform actions with

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/user/share":{"post":{"tags":["user"],"summary":"Create user for share to perform actions with","operationId":"create_share_user_user_share_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_create_share_user_user_share_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserMetadataDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_create_share_user_user_share_post":{"properties":{"name":{"type":"string","title":"Name","description":"The name of the user"},"email":{"type":"string","title":"Email","description":"The email of the user"}},"type":"object","required":["name","email"],"title":"Body_create_share_user_user_share_post"},"UserMetadataDTO":{"properties":{"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"onboarding_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Onboarding Status"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"},"last_accessed":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Accessed"},"occupation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Occupation"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"referral_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Referral Source"},"phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone Number"},"used_desktop_app":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Used Desktop App"},"client_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Client Metadata"},"id":{"type":"string","format":"uuid","title":"Id"},"is_shade_admin":{"type":"boolean","title":"Is Shade Admin"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"total_roots":{"type":"integer","title":"Total Roots"},"plan_status":{"$ref":"#/components/schemas/UserPlanStatus"},"plan":{"$ref":"#/components/schemas/UserPlan"},"asset_limit":{"type":"integer","title":"Asset Limit"},"total_indexed":{"type":"integer","title":"Total Indexed"},"total_storage":{"type":"integer","title":"Total Storage"}},"type":"object","required":["id","is_shade_admin","created_at","total_roots","plan_status","plan","asset_limit","total_indexed","total_storage"],"title":"UserMetadataDTO"},"UserPlanStatus":{"type":"string","enum":["incomplete","incomplete_expired","trialing","active","past_due","canceled","unpaid","guest"],"title":"UserPlanStatus"},"UserPlan":{"type":"string","enum":["free","guest","pro","pro-life"],"title":"UserPlan"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## GET /user/auth-token

> Generate custom token for user auth

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/user/auth-token":{"get":{"tags":["user"],"summary":"Generate custom token for user auth","operationId":"auth_token_user_auth_token_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Auth Token User Auth Token Get"}}}},"404":{"description":"Not found"}}}}}}
```


# Api Keys

## GET /api-keys

> List all API keys for a user

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/api-keys":{"get":{"tags":["api-keys"],"summary":"List all API keys for a user","operationId":"get_user_api_keys_api_keys_get","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_user_api_keys_api_keys_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/APIKeyDTO"},"title":"Response Get User Api Keys Api Keys Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_user_api_keys_api_keys_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_user_api_keys_api_keys_get"},"APIKeyDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"preview":{"type":"string","title":"Preview"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"created":{"type":"string","format":"date-time","title":"Created"}},"type":"object","required":["id","name","preview","user_id","expires_at","created"],"title":"APIKeyDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## POST /api-keys

> Create an API key for a user

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/api-keys":{"post":{"tags":["api-keys"],"summary":"Create an API key for a user","operationId":"create_api_key_api_keys_post","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_create_api_key_api_keys_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_create_api_key_api_keys_post":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The name of the API key","description":"A human-readable name for the API key"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"The expiration date","description":"The date and time when the API key will expire"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_create_api_key_api_keys_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## DELETE /api-keys/{api\_key\_id}

> Delete an API key

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/api-keys/{api_key_id}":{"delete":{"tags":["api-keys"],"summary":"Delete an API key","operationId":"delete_api_key_api_keys__api_key_id__delete","parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The API key ID"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_delete_api_key_api_keys__api_key_id__delete"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_delete_api_key_api_keys__api_key_id__delete":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_delete_api_key_api_keys__api_key_id__delete"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```


# Groups

## Add Users To Group

> Create a new group.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/groups/{group_id}/users":{"post":{"tags":["groups"],"summary":"Add Users To Group","description":"Create a new group.","operationId":"add_users_to_group_groups__group_id__users_post","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_add_users_to_group_groups__group_id__users_post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_add_users_to_group_groups__group_id__users_post":{"properties":{"emails":{"items":{"type":"string","format":"email"},"type":"array","title":"The users to add to the group"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["emails"],"title":"Body_add_users_to_group_groups__group_id__users_post"},"GroupDTO":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Name of the group"},"id":{"type":"string","format":"uuid","title":"Id"}},"type":"object","required":["name","id"],"title":"GroupDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Remove Users From Group

> Remove users from a group.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/groups/{group_id}/users":{"delete":{"tags":["groups"],"summary":"Remove Users From Group","description":"Remove users from a group.","operationId":"remove_users_from_group_groups__group_id__users_delete","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_remove_users_from_group_groups__group_id__users_delete"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_remove_users_from_group_groups__group_id__users_delete":{"properties":{"user_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"The users to add to the group"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["user_ids"],"title":"Body_remove_users_from_group_groups__group_id__users_delete"},"GroupDTO":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Name of the group"},"id":{"type":"string","format":"uuid","title":"Id"}},"type":"object","required":["name","id"],"title":"GroupDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Read Groups

> f\
> Retrieve a list of groups.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/groups":{"get":{"tags":["groups"],"summary":"Read Groups","description":"f\nRetrieve a list of groups.","operationId":"read_groups_groups_get","parameters":[{"name":"workspace_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The workspace id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_read_groups_groups_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GroupFullDTO"},"title":"Response Read Groups Groups Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_read_groups_groups_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_read_groups_groups_get"},"GroupFullDTO":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Name of the group"},"id":{"type":"string","format":"uuid","title":"Id"},"group_type":{"type":"string","title":"Group Type"},"user_count":{"type":"integer","title":"User Count"}},"type":"object","required":["name","id","group_type","user_count"],"title":"GroupFullDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Create New Group

> Create a new group.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/groups":{"post":{"tags":["groups"],"summary":"Create New Group","description":"Create a new group.","operationId":"create_new_group_groups_post","parameters":[{"name":"workspace_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The workspace id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_create_new_group_groups_post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_create_new_group_groups_post":{"properties":{"name":{"type":"string","title":"The name of the group"},"emails":{"items":{"type":"string","format":"email"},"type":"array","title":"The users to add to the group"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["name","emails"],"title":"Body_create_new_group_groups_post"},"GroupDTO":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Name of the group"},"id":{"type":"string","format":"uuid","title":"Id"}},"type":"object","required":["name","id"],"title":"GroupDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Read Group

> Get a specific group by ID.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/groups/{group_id}":{"get":{"tags":["groups"],"summary":"Read Group","description":"Get a specific group by ID.","operationId":"read_group_groups__group_id__get","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_read_group_groups__group_id__get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWithUsersDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_read_group_groups__group_id__get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_read_group_groups__group_id__get"},"GroupWithUsersDTO":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Name of the group"},"id":{"type":"string","format":"uuid","title":"Id"},"group_type":{"type":"string","title":"Group Type"},"user_count":{"type":"integer","title":"User Count"},"users":{"items":{"$ref":"#/components/schemas/UserDTO"},"type":"array","title":"Users"}},"type":"object","required":["name","id","group_type","user_count","users"],"title":"GroupWithUsersDTO"},"UserDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"},"external_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Id"},"joined":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Joined"}},"type":"object","required":["id","name","email","avatar_url","user_type","external_id"],"title":"UserDTO"},"UserType":{"type":"string","enum":["regular","group"],"title":"UserType"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Update Existing Group

> Update a group's name.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/groups/{group_id}":{"put":{"tags":["groups"],"summary":"Update Existing Group","description":"Update a group's name.","operationId":"update_existing_group_groups__group_id__put","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}},{"name":"workspace_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The workspace id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_update_existing_group_groups__group_id__put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_update_existing_group_groups__group_id__put":{"properties":{"name":{"type":"string","title":"The name of the group"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["name"],"title":"Body_update_existing_group_groups__group_id__put"},"GroupDTO":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Name of the group"},"id":{"type":"string","format":"uuid","title":"Id"}},"type":"object","required":["name","id"],"title":"GroupDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Delete Existing Group

> Delete a group by ID.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/groups/{group_id}":{"delete":{"tags":["groups"],"summary":"Delete Existing Group","description":"Delete a group by ID.","operationId":"delete_existing_group_groups__group_id__delete","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_delete_existing_group_groups__group_id__delete"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_delete_existing_group_groups__group_id__delete":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_delete_existing_group_groups__group_id__delete"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```


# Assets

## Get the metadata for an asset

> Get the metadata for an asset

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/{asset_id}/metadata":{"get":{"tags":["assets","metadata"],"summary":"Get the metadata for an asset","description":"Get the metadata for an asset","operationId":"get_metadata_assets__asset_id__metadata_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The asset id","description":"The asset to get the metadata for"},"description":"The asset to get the metadata for"},{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this asset is in"},"description":"The id of the drive this asset is in"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_metadata_assets__asset_id__metadata_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Metadata Assets  Asset Id  Metadata Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_metadata_assets__asset_id__metadata_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_metadata_assets__asset_id__metadata_get"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Update an asset's metadata value

> Update an asset's metadata attribute value

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/{asset_id}/metadata/{metadata_attribute_id}/value":{"put":{"tags":["assets","metadata"],"summary":"Update an asset's metadata value","description":"Update an asset's metadata attribute value","operationId":"update_asset_metadata_value_assets__asset_id__metadata__metadata_attribute_id__value_put","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The asset id","description":"The id of the asset to be updated"},"description":"The id of the asset to be updated"},{"name":"metadata_attribute_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"string","format":"uuid"}],"title":"Metadata Attribute ID","description":"The id of the metadata attribute to update"},"description":"The id of the metadata attribute to update"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_update_asset_metadata_value_assets__asset_id__metadata__metadata_attribute_id__value_put"}}}},"responses":{"200":{"description":"The updated asset","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_update_asset_metadata_value_assets__asset_id__metadata__metadata_attribute_id__value_put":{"properties":{"drive_id":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this asset is in"},"metadata_attribute_value":{"anyOf":[{},{"type":"null"}],"title":"Metadata Attribute Value","description":"The new value for the metadata attribute. Not passing this will remove the value."},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["drive_id"],"title":"Body_update_asset_metadata_value_assets__asset_id__metadata__metadata_attribute_id__value_put"},"AssetDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"path":{"type":"string","title":"Path"},"name":{"type":"string","title":"Name"},"extension":{"type":"string","title":"Extension"},"updated":{"type":"string","format":"date-time","title":"Updated"},"created":{"type":"string","format":"date-time","title":"Created"},"type":{"$ref":"#/components/schemas/AssetType"},"size_bytes":{"type":"integer","title":"Size Bytes"},"stack_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Stack Id"},"stack_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stack Number"},"is_fs_draft_blob":{"type":"boolean","title":"Is Fs Draft Blob"},"is_fs_null_blob":{"type":"boolean","title":"Is Fs Null Blob"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"ai_indexed":{"type":"boolean","title":"Ai Indexed"},"system_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"System Metadata","default":{}},"custom_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Custom Metadata","default":{}},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"palette":{"items":{"items":{"type":"integer"},"type":"array"},"type":"array","title":"Palette"},"ocr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ocr"},"transcription_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Transcription Id"},"faces_present":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Faces Present"},"content_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Content Length"},"preview_job_state":{"$ref":"#/components/schemas/JobState"},"metadata_job_state":{"$ref":"#/components/schemas/JobState"},"core_vision_job_state":{"$ref":"#/components/schemas/JobState"},"color_palette_job_state":{"$ref":"#/components/schemas/JobState"},"core_audio_job_state":{"$ref":"#/components/schemas/JobState"},"audio_job_state":{"$ref":"#/components/schemas/JobState"},"facial_recognition_job_state":{"$ref":"#/components/schemas/JobState"},"proxy_job_state":{"$ref":"#/components/schemas/JobState"},"audio_proxy_job_state":{"$ref":"#/components/schemas/JobState"},"transcription_job_state":{"$ref":"#/components/schemas/JobState"},"objects":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Objects"},"texture_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Texture Data"},"integration_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Integration Data"},"preview_images":{"items":{"$ref":"#/components/schemas/PreviewDTO"},"type":"array","title":"Preview Images"},"custom_thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}]},"proxy":{"anyOf":[{"$ref":"#/components/schemas/ProxyDTO"},{"type":"null"}]},"audio_proxy":{"anyOf":[{"$ref":"#/components/schemas/ProxyDTO"},{"type":"null"}]}},"type":"object","required":["id","drive_id","path","name","extension","updated","created","type","size_bytes","is_fs_draft_blob","is_fs_null_blob","ai_indexed","palette","preview_job_state","metadata_job_state","core_vision_job_state","color_palette_job_state","core_audio_job_state","facial_recognition_job_state","proxy_job_state","audio_proxy_job_state","transcription_job_state","preview_images"],"title":"AssetDTO","description":"Full asset DTO with relationship fields that require eager loading."},"AssetType":{"type":"string","enum":["IMAGE","VIDEO","AUDIO","DOCUMENT","HDR","HDRI","PHOTOSHOP","ILLUSTRATOR","EXR","OBJECT","VECTOR","OTHER","MAYA","MAX","BLENDER","HOUDINI","UNREAL","UNITY","AFTER_EFFECTS","MOGRT"],"title":"AssetType"},"JobState":{"type":"string","enum":["NOT_STARTED","IN_PROGRESS","COMPLETED","FAILED","INSUFFICIENT_CREDITS"],"title":"JobState","description":"Enum for asset job states"},"PreviewDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"frame":{"type":"integer","title":"Frame"},"signed_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Url"}},"type":"object","required":["id","frame"],"title":"PreviewDTO"},"ProxyDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"}},"type":"object","required":["id"],"title":"ProxyDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Bulk update asset metadata attributes

> Either pass in asset\_ids/metadata\_attributes OR assets.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/metadata/values":{"put":{"tags":["assets","metadata"],"summary":"Bulk update asset metadata attributes","description":"Either pass in asset_ids/metadata_attributes OR assets.","operationId":"bulk_update_asset_metadata_attributes_assets_metadata_values_put","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_bulk_update_asset_metadata_attributes_assets_metadata_values_put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BulkMetadataAttributeUpdateResponseDTO"},"title":"Response Bulk Update Asset Metadata Attributes Assets Metadata Values Put"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_bulk_update_asset_metadata_attributes_assets_metadata_values_put":{"properties":{"asset_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"The asset id","description":"The id of the assets to be updated"},"metadata_attributes":{"anyOf":[{"items":{"$ref":"#/components/schemas/BulkMetadataAttributeUpdate"},"type":"array"},{"type":"null"}],"title":"Metadata Attribute ID","description":"The id and values of the metadata attributes to update"},"asset_ids_with_metadata_attributes":{"anyOf":[{"items":{"$ref":"#/components/schemas/BulkMetadataAttributeUpdatePerAsset"},"type":"array"},{"type":"null"}],"title":"Asset to be modified with the corresponding metadata","description":"The asset ids and their corresponding metadata attributes to update"},"drive_id":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this asset is in"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["drive_id"],"title":"Body_bulk_update_asset_metadata_attributes_assets_metadata_values_put"},"BulkMetadataAttributeUpdate":{"properties":{"id":{"type":"string","title":"Id"},"value":{"title":"Value"},"append":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Append","default":false}},"type":"object","required":["id","value"],"title":"BulkMetadataAttributeUpdate"},"BulkMetadataAttributeUpdatePerAsset":{"properties":{"asset_id":{"type":"string","format":"uuid","title":"Asset Id"},"metadata_attributes":{"items":{"$ref":"#/components/schemas/BulkMetadataAttributeUpdate"},"type":"array","title":"Metadata Attributes"}},"type":"object","required":["asset_id","metadata_attributes"],"title":"BulkMetadataAttributeUpdatePerAsset"},"BulkMetadataAttributeUpdateResponseDTO":{"properties":{"asset_id":{"type":"string","format":"uuid","title":"Asset Id"},"updated_metadata_attribute_ids":{"items":{"type":"string"},"type":"array","title":"Updated Metadata Attribute Ids"}},"type":"object","required":["asset_id","updated_metadata_attribute_ids"],"title":"BulkMetadataAttributeUpdateResponseDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get all comments for an asset

> Get all comments for an asset

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/{asset_id}/comments":{"get":{"tags":["assets","comments"],"summary":"Get all comments for an asset","description":"Get all comments for an asset","operationId":"get_asset_comments_assets__asset_id__comments_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The asset id","description":"The id of the asset to retrieve"},"description":"The id of the asset to retrieve"},{"name":"drive_id","in":"query","required":false,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this asset is in"},"description":"The id of the drive this asset is in"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_asset_comments_assets__asset_id__comments_get"}}}},"responses":{"200":{"description":"A list of all comments for the asset","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CommentDTO"},"title":"Response Get Asset Comments Assets  Asset Id  Comments Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_asset_comments_assets__asset_id__comments_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_asset_comments_assets__asset_id__comments_get"},"CommentDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"asset_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Asset Id"},"content":{"type":"string","title":"Content"},"author":{"$ref":"#/components/schemas/UserDTOBase"},"created":{"type":"string","format":"date-time","title":"Created"},"updated":{"type":"string","format":"date-time","title":"Updated"},"resolved":{"type":"boolean","title":"Resolved"},"is_public":{"type":"boolean","title":"Is Public"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"timestamp":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Timestamp"},"duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration"},"replies":{"items":{"$ref":"#/components/schemas/CommentDTO"},"type":"array","title":"Replies","default":[]},"mentions":{"items":{"$ref":"#/components/schemas/Mention"},"type":"array","title":"Mentions","default":[]},"reactions":{"items":{"$ref":"#/components/schemas/ReactionDTO"},"type":"array","title":"Reactions","default":[]},"anchor":{"anyOf":[{"$ref":"#/components/schemas/CommentAnchor"},{"type":"null"}]},"annotation":{"anyOf":[{"items":{"$ref":"#/components/schemas/CommentAnnotationPath"},"type":"array"},{"type":"null"}],"title":"Annotation"},"is_copied":{"type":"boolean","title":"Is Copied","default":false},"attachments":{"items":{"$ref":"#/components/schemas/AttachmentToDownloadDTO"},"type":"array","title":"Attachments","default":[]}},"type":"object","required":["id","asset_id","content","author","created","updated","resolved","is_public","parent_id","timestamp","duration","anchor"],"title":"CommentDTO"},"UserDTOBase":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"}},"type":"object","required":["id","name","email","avatar_url","user_type"],"title":"UserDTOBase"},"UserType":{"type":"string","enum":["regular","group"],"title":"UserType"},"Mention":{"properties":{"user_id":{"type":"string","title":"User Id"},"text":{"type":"string","title":"Text"},"start_index":{"type":"integer","title":"Start Index"},"end_index":{"type":"integer","title":"End Index"},"user_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Name","default":""}},"type":"object","required":["user_id","text","start_index","end_index"],"title":"Mention"},"ReactionDTO":{"properties":{"users":{"items":{"$ref":"#/components/schemas/UserDTOWithCommentId"},"type":"array","title":"Users"},"content":{"type":"string","title":"Content"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["users","content","count"],"title":"ReactionDTO"},"UserDTOWithCommentId":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"},"comment_id":{"type":"string","format":"uuid","title":"Comment Id"}},"type":"object","required":["id","name","email","avatar_url","user_type","comment_id"],"title":"UserDTOWithCommentId"},"CommentAnchor":{"properties":{"x":{"type":"number","title":"X"},"y":{"type":"number","title":"Y"}},"type":"object","required":["x","y"],"title":"CommentAnchor"},"CommentAnnotationPath":{"properties":{"tool":{"type":"string","title":"Tool"},"color":{"type":"string","title":"Color"},"size":{"type":"number","title":"Size"},"xs":{"items":{"type":"number"},"type":"array","title":"Xs"},"ys":{"items":{"type":"number"},"type":"array","title":"Ys"}},"type":"object","required":["tool","color","size","xs","ys"],"title":"CommentAnnotationPath","description":"A path in a comment annotation"},"AttachmentToDownloadDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"uploader_id":{"type":"string","format":"uuid","title":"Uploader Id"},"uploaded":{"type":"boolean","title":"Uploaded"},"name":{"type":"string","title":"Name"},"mime_type":{"type":"string","title":"Mime Type"},"size":{"type":"integer","title":"Size"},"download_url":{"type":"string","title":"Download Url"}},"type":"object","required":["id","drive_id","uploader_id","uploaded","name","mime_type","size","download_url"],"title":"AttachmentToDownloadDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Add a comment to an asset

> Add a comment to an asset

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/{asset_id}/comments":{"post":{"tags":["assets","comments"],"summary":"Add a comment to an asset","description":"Add a comment to an asset","operationId":"add_asset_comment_assets__asset_id__comments_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The asset id","description":"The id of the asset to retrieve"},"description":"The id of the asset to retrieve"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_add_asset_comment_assets__asset_id__comments_post"}}}},"responses":{"200":{"description":"The comment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_add_asset_comment_assets__asset_id__comments_post":{"properties":{"drive_id":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this asset is in"},"comment":{"type":"string","title":"Comment","description":"The comment to add to the asset"},"mentions":{"anyOf":[{"items":{"$ref":"#/components/schemas/Mention"},"type":"array"},{"type":"null"}],"title":"Mentions","description":"The mentions in the comment","default":[]},"timestamp":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Timestamp from start","description":"The timestamp of the comment from the start of the video"},"duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration of the comment timestamp","description":"The duration of the comment timestamp in seconds (for range based comments)"},"is_public":{"type":"boolean","title":"Is Public Comment?","description":"Whether the comment is public or not","default":true},"url":{"type":"string","title":"Url of the comment","description":"The url of the comment"},"anchor":{"anyOf":[{"$ref":"#/components/schemas/CommentAnchor"},{"type":"null"}],"title":"Anchor","description":"The anchor of the comment"},"annotation":{"anyOf":[{"items":{"$ref":"#/components/schemas/CommentAnnotationPath"},"type":"array"},{"type":"null"}],"title":"The annotation of the comment","description":"The annotation is a list of annotation paths"},"attachment_tokens":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Attachment tokens","description":"JWT tokens for attachments to link to this comment"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["comment","url"],"title":"Body_add_asset_comment_assets__asset_id__comments_post"},"Mention":{"properties":{"user_id":{"type":"string","title":"User Id"},"text":{"type":"string","title":"Text"},"start_index":{"type":"integer","title":"Start Index"},"end_index":{"type":"integer","title":"End Index"},"user_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Name","default":""}},"type":"object","required":["user_id","text","start_index","end_index"],"title":"Mention"},"CommentAnchor":{"properties":{"x":{"type":"number","title":"X"},"y":{"type":"number","title":"Y"}},"type":"object","required":["x","y"],"title":"CommentAnchor"},"CommentAnnotationPath":{"properties":{"tool":{"type":"string","title":"Tool"},"color":{"type":"string","title":"Color"},"size":{"type":"number","title":"Size"},"xs":{"items":{"type":"number"},"type":"array","title":"Xs"},"ys":{"items":{"type":"number"},"type":"array","title":"Ys"}},"type":"object","required":["tool","color","size","xs","ys"],"title":"CommentAnnotationPath","description":"A path in a comment annotation"},"CommentDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"asset_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Asset Id"},"content":{"type":"string","title":"Content"},"author":{"$ref":"#/components/schemas/UserDTOBase"},"created":{"type":"string","format":"date-time","title":"Created"},"updated":{"type":"string","format":"date-time","title":"Updated"},"resolved":{"type":"boolean","title":"Resolved"},"is_public":{"type":"boolean","title":"Is Public"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"timestamp":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Timestamp"},"duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration"},"replies":{"items":{"$ref":"#/components/schemas/CommentDTO"},"type":"array","title":"Replies","default":[]},"mentions":{"items":{"$ref":"#/components/schemas/Mention"},"type":"array","title":"Mentions","default":[]},"reactions":{"items":{"$ref":"#/components/schemas/ReactionDTO"},"type":"array","title":"Reactions","default":[]},"anchor":{"anyOf":[{"$ref":"#/components/schemas/CommentAnchor"},{"type":"null"}]},"annotation":{"anyOf":[{"items":{"$ref":"#/components/schemas/CommentAnnotationPath"},"type":"array"},{"type":"null"}],"title":"Annotation"},"is_copied":{"type":"boolean","title":"Is Copied","default":false},"attachments":{"items":{"$ref":"#/components/schemas/AttachmentToDownloadDTO"},"type":"array","title":"Attachments","default":[]}},"type":"object","required":["id","asset_id","content","author","created","updated","resolved","is_public","parent_id","timestamp","duration","anchor"],"title":"CommentDTO"},"UserDTOBase":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"}},"type":"object","required":["id","name","email","avatar_url","user_type"],"title":"UserDTOBase"},"UserType":{"type":"string","enum":["regular","group"],"title":"UserType"},"ReactionDTO":{"properties":{"users":{"items":{"$ref":"#/components/schemas/UserDTOWithCommentId"},"type":"array","title":"Users"},"content":{"type":"string","title":"Content"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["users","content","count"],"title":"ReactionDTO"},"UserDTOWithCommentId":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"},"comment_id":{"type":"string","format":"uuid","title":"Comment Id"}},"type":"object","required":["id","name","email","avatar_url","user_type","comment_id"],"title":"UserDTOWithCommentId"},"AttachmentToDownloadDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"uploader_id":{"type":"string","format":"uuid","title":"Uploader Id"},"uploaded":{"type":"boolean","title":"Uploaded"},"name":{"type":"string","title":"Name"},"mime_type":{"type":"string","title":"Mime Type"},"size":{"type":"integer","title":"Size"},"download_url":{"type":"string","title":"Download Url"}},"type":"object","required":["id","drive_id","uploader_id","uploaded","name","mime_type","size","download_url"],"title":"AttachmentToDownloadDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Update a comment

> Update a comment

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/{asset_id}/comments/{comment_id}":{"put":{"tags":["assets","comments"],"summary":"Update a comment","description":"Update a comment","operationId":"update_comment_handler_assets__asset_id__comments__comment_id__put","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The asset id","description":"The id of the asset that the comment is on"},"description":"The id of the asset that the comment is on"},{"name":"comment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The comment id","description":"The id of the comment to update"},"description":"The id of the comment to update"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_update_comment_handler_assets__asset_id__comments__comment_id__put"}}}},"responses":{"200":{"description":"The comment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_update_comment_handler_assets__asset_id__comments__comment_id__put":{"properties":{"drive_id":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this comment is in"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment","description":"The comment to add to the asset"},"mentions":{"anyOf":[{"items":{"$ref":"#/components/schemas/Mention"},"type":"array"},{"type":"null"}],"title":"Mentions","description":"The mentions in the comment"},"is_public":{"type":"boolean","title":"Is Public Comment?","description":"Whether the comment is public or not"},"url":{"type":"string","title":"Url of the comment","description":"The url of the comment"},"timestamp":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Timestamp from start","description":"The timestamp of the comment from the start of the video. delete with -1"},"duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration of the comment timestamp","description":"The duration of the comment timestamp in seconds (for range based comments). delete with -1"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["drive_id","url"],"title":"Body_update_comment_handler_assets__asset_id__comments__comment_id__put"},"Mention":{"properties":{"user_id":{"type":"string","title":"User Id"},"text":{"type":"string","title":"Text"},"start_index":{"type":"integer","title":"Start Index"},"end_index":{"type":"integer","title":"End Index"},"user_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Name","default":""}},"type":"object","required":["user_id","text","start_index","end_index"],"title":"Mention"},"CommentDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"asset_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Asset Id"},"content":{"type":"string","title":"Content"},"author":{"$ref":"#/components/schemas/UserDTOBase"},"created":{"type":"string","format":"date-time","title":"Created"},"updated":{"type":"string","format":"date-time","title":"Updated"},"resolved":{"type":"boolean","title":"Resolved"},"is_public":{"type":"boolean","title":"Is Public"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"timestamp":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Timestamp"},"duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration"},"replies":{"items":{"$ref":"#/components/schemas/CommentDTO"},"type":"array","title":"Replies","default":[]},"mentions":{"items":{"$ref":"#/components/schemas/Mention"},"type":"array","title":"Mentions","default":[]},"reactions":{"items":{"$ref":"#/components/schemas/ReactionDTO"},"type":"array","title":"Reactions","default":[]},"anchor":{"anyOf":[{"$ref":"#/components/schemas/CommentAnchor"},{"type":"null"}]},"annotation":{"anyOf":[{"items":{"$ref":"#/components/schemas/CommentAnnotationPath"},"type":"array"},{"type":"null"}],"title":"Annotation"},"is_copied":{"type":"boolean","title":"Is Copied","default":false},"attachments":{"items":{"$ref":"#/components/schemas/AttachmentToDownloadDTO"},"type":"array","title":"Attachments","default":[]}},"type":"object","required":["id","asset_id","content","author","created","updated","resolved","is_public","parent_id","timestamp","duration","anchor"],"title":"CommentDTO"},"UserDTOBase":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"}},"type":"object","required":["id","name","email","avatar_url","user_type"],"title":"UserDTOBase"},"UserType":{"type":"string","enum":["regular","group"],"title":"UserType"},"ReactionDTO":{"properties":{"users":{"items":{"$ref":"#/components/schemas/UserDTOWithCommentId"},"type":"array","title":"Users"},"content":{"type":"string","title":"Content"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["users","content","count"],"title":"ReactionDTO"},"UserDTOWithCommentId":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"},"comment_id":{"type":"string","format":"uuid","title":"Comment Id"}},"type":"object","required":["id","name","email","avatar_url","user_type","comment_id"],"title":"UserDTOWithCommentId"},"CommentAnchor":{"properties":{"x":{"type":"number","title":"X"},"y":{"type":"number","title":"Y"}},"type":"object","required":["x","y"],"title":"CommentAnchor"},"CommentAnnotationPath":{"properties":{"tool":{"type":"string","title":"Tool"},"color":{"type":"string","title":"Color"},"size":{"type":"number","title":"Size"},"xs":{"items":{"type":"number"},"type":"array","title":"Xs"},"ys":{"items":{"type":"number"},"type":"array","title":"Ys"}},"type":"object","required":["tool","color","size","xs","ys"],"title":"CommentAnnotationPath","description":"A path in a comment annotation"},"AttachmentToDownloadDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"uploader_id":{"type":"string","format":"uuid","title":"Uploader Id"},"uploaded":{"type":"boolean","title":"Uploaded"},"name":{"type":"string","title":"Name"},"mime_type":{"type":"string","title":"Mime Type"},"size":{"type":"integer","title":"Size"},"download_url":{"type":"string","title":"Download Url"}},"type":"object","required":["id","drive_id","uploader_id","uploaded","name","mime_type","size","download_url"],"title":"AttachmentToDownloadDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Delete a comment

> Delete a comment

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/{asset_id}/comments/{comment_id}":{"delete":{"tags":["assets","comments"],"summary":"Delete a comment","description":"Delete a comment","operationId":"delete_comment_handler_assets__asset_id__comments__comment_id__delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The asset id","description":"The id of the asset that the comment is on"},"description":"The id of the asset that the comment is on"},{"name":"comment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The comment id","description":"The id of the comment to delete"},"description":"The id of the comment to delete"},{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this comment is in"},"description":"The id of the drive this comment is in"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_delete_comment_handler_assets__asset_id__comments__comment_id__delete"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_delete_comment_handler_assets__asset_id__comments__comment_id__delete":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_delete_comment_handler_assets__asset_id__comments__comment_id__delete"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Update a comment to be resolved or not

> Update a comment's resolve status

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/{asset_id}/comments/{comment_id}/resolve":{"put":{"tags":["assets","comments"],"summary":"Update a comment to be resolved or not","description":"Update a comment's resolve status","operationId":"resolve_comment_handler_assets__asset_id__comments__comment_id__resolve_put","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The asset id","description":"The id of the asset that the comment is on"},"description":"The id of the asset that the comment is on"},{"name":"comment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The comment id","description":"The id of the comment to update"},"description":"The id of the comment to update"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_resolve_comment_handler_assets__asset_id__comments__comment_id__resolve_put"}}}},"responses":{"200":{"description":"The comment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_resolve_comment_handler_assets__asset_id__comments__comment_id__resolve_put":{"properties":{"drive_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"The drive id","description":"The id of the drive this comment is in"},"resolved":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Resolved","description":"Whether the comment is resolved"},"url":{"type":"string","title":"Url of the comment","description":"The url of the comment with REPLACE_COMMENT_ID_ON_SERVER placeholder"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["url"],"title":"Body_resolve_comment_handler_assets__asset_id__comments__comment_id__resolve_put"},"CommentDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"asset_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Asset Id"},"content":{"type":"string","title":"Content"},"author":{"$ref":"#/components/schemas/UserDTOBase"},"created":{"type":"string","format":"date-time","title":"Created"},"updated":{"type":"string","format":"date-time","title":"Updated"},"resolved":{"type":"boolean","title":"Resolved"},"is_public":{"type":"boolean","title":"Is Public"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"timestamp":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Timestamp"},"duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration"},"replies":{"items":{"$ref":"#/components/schemas/CommentDTO"},"type":"array","title":"Replies","default":[]},"mentions":{"items":{"$ref":"#/components/schemas/Mention"},"type":"array","title":"Mentions","default":[]},"reactions":{"items":{"$ref":"#/components/schemas/ReactionDTO"},"type":"array","title":"Reactions","default":[]},"anchor":{"anyOf":[{"$ref":"#/components/schemas/CommentAnchor"},{"type":"null"}]},"annotation":{"anyOf":[{"items":{"$ref":"#/components/schemas/CommentAnnotationPath"},"type":"array"},{"type":"null"}],"title":"Annotation"},"is_copied":{"type":"boolean","title":"Is Copied","default":false},"attachments":{"items":{"$ref":"#/components/schemas/AttachmentToDownloadDTO"},"type":"array","title":"Attachments","default":[]}},"type":"object","required":["id","asset_id","content","author","created","updated","resolved","is_public","parent_id","timestamp","duration","anchor"],"title":"CommentDTO"},"UserDTOBase":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"}},"type":"object","required":["id","name","email","avatar_url","user_type"],"title":"UserDTOBase"},"UserType":{"type":"string","enum":["regular","group"],"title":"UserType"},"Mention":{"properties":{"user_id":{"type":"string","title":"User Id"},"text":{"type":"string","title":"Text"},"start_index":{"type":"integer","title":"Start Index"},"end_index":{"type":"integer","title":"End Index"},"user_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Name","default":""}},"type":"object","required":["user_id","text","start_index","end_index"],"title":"Mention"},"ReactionDTO":{"properties":{"users":{"items":{"$ref":"#/components/schemas/UserDTOWithCommentId"},"type":"array","title":"Users"},"content":{"type":"string","title":"Content"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["users","content","count"],"title":"ReactionDTO"},"UserDTOWithCommentId":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"},"comment_id":{"type":"string","format":"uuid","title":"Comment Id"}},"type":"object","required":["id","name","email","avatar_url","user_type","comment_id"],"title":"UserDTOWithCommentId"},"CommentAnchor":{"properties":{"x":{"type":"number","title":"X"},"y":{"type":"number","title":"Y"}},"type":"object","required":["x","y"],"title":"CommentAnchor"},"CommentAnnotationPath":{"properties":{"tool":{"type":"string","title":"Tool"},"color":{"type":"string","title":"Color"},"size":{"type":"number","title":"Size"},"xs":{"items":{"type":"number"},"type":"array","title":"Xs"},"ys":{"items":{"type":"number"},"type":"array","title":"Ys"}},"type":"object","required":["tool","color","size","xs","ys"],"title":"CommentAnnotationPath","description":"A path in a comment annotation"},"AttachmentToDownloadDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"uploader_id":{"type":"string","format":"uuid","title":"Uploader Id"},"uploaded":{"type":"boolean","title":"Uploaded"},"name":{"type":"string","title":"Name"},"mime_type":{"type":"string","title":"Mime Type"},"size":{"type":"integer","title":"Size"},"download_url":{"type":"string","title":"Download Url"}},"type":"object","required":["id","drive_id","uploader_id","uploaded","name","mime_type","size","download_url"],"title":"AttachmentToDownloadDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Reply to a comment

> Reply to a comment

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/{asset_id}/comments/{comment_id}/reply":{"post":{"tags":["assets","comments"],"summary":"Reply to a comment","description":"Reply to a comment","operationId":"reply_comment_handler_assets__asset_id__comments__comment_id__reply_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The asset id","description":"The id of the asset that the comment is on"},"description":"The id of the asset that the comment is on"},{"name":"comment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The comment id","description":"The id of the comment to reply to"},"description":"The id of the comment to reply to"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_reply_comment_handler_assets__asset_id__comments__comment_id__reply_post"}}}},"responses":{"200":{"description":"The comment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_reply_comment_handler_assets__asset_id__comments__comment_id__reply_post":{"properties":{"drive_id":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this comment is in"},"content":{"type":"string","title":"Comment content","description":"The content of the comment to add to the asset"},"mentions":{"anyOf":[{"items":{"$ref":"#/components/schemas/Mention"},"type":"array"},{"type":"null"}],"title":"Mentions","description":"The mentions in the comment","default":[]},"url":{"type":"string","title":"Url of the comment","description":"The url of the comment"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["drive_id","content","url"],"title":"Body_reply_comment_handler_assets__asset_id__comments__comment_id__reply_post"},"Mention":{"properties":{"user_id":{"type":"string","title":"User Id"},"text":{"type":"string","title":"Text"},"start_index":{"type":"integer","title":"Start Index"},"end_index":{"type":"integer","title":"End Index"},"user_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Name","default":""}},"type":"object","required":["user_id","text","start_index","end_index"],"title":"Mention"},"CommentDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"asset_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Asset Id"},"content":{"type":"string","title":"Content"},"author":{"$ref":"#/components/schemas/UserDTOBase"},"created":{"type":"string","format":"date-time","title":"Created"},"updated":{"type":"string","format":"date-time","title":"Updated"},"resolved":{"type":"boolean","title":"Resolved"},"is_public":{"type":"boolean","title":"Is Public"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"timestamp":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Timestamp"},"duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration"},"replies":{"items":{"$ref":"#/components/schemas/CommentDTO"},"type":"array","title":"Replies","default":[]},"mentions":{"items":{"$ref":"#/components/schemas/Mention"},"type":"array","title":"Mentions","default":[]},"reactions":{"items":{"$ref":"#/components/schemas/ReactionDTO"},"type":"array","title":"Reactions","default":[]},"anchor":{"anyOf":[{"$ref":"#/components/schemas/CommentAnchor"},{"type":"null"}]},"annotation":{"anyOf":[{"items":{"$ref":"#/components/schemas/CommentAnnotationPath"},"type":"array"},{"type":"null"}],"title":"Annotation"},"is_copied":{"type":"boolean","title":"Is Copied","default":false},"attachments":{"items":{"$ref":"#/components/schemas/AttachmentToDownloadDTO"},"type":"array","title":"Attachments","default":[]}},"type":"object","required":["id","asset_id","content","author","created","updated","resolved","is_public","parent_id","timestamp","duration","anchor"],"title":"CommentDTO"},"UserDTOBase":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"}},"type":"object","required":["id","name","email","avatar_url","user_type"],"title":"UserDTOBase"},"UserType":{"type":"string","enum":["regular","group"],"title":"UserType"},"ReactionDTO":{"properties":{"users":{"items":{"$ref":"#/components/schemas/UserDTOWithCommentId"},"type":"array","title":"Users"},"content":{"type":"string","title":"Content"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["users","content","count"],"title":"ReactionDTO"},"UserDTOWithCommentId":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"},"comment_id":{"type":"string","format":"uuid","title":"Comment Id"}},"type":"object","required":["id","name","email","avatar_url","user_type","comment_id"],"title":"UserDTOWithCommentId"},"CommentAnchor":{"properties":{"x":{"type":"number","title":"X"},"y":{"type":"number","title":"Y"}},"type":"object","required":["x","y"],"title":"CommentAnchor"},"CommentAnnotationPath":{"properties":{"tool":{"type":"string","title":"Tool"},"color":{"type":"string","title":"Color"},"size":{"type":"number","title":"Size"},"xs":{"items":{"type":"number"},"type":"array","title":"Xs"},"ys":{"items":{"type":"number"},"type":"array","title":"Ys"}},"type":"object","required":["tool","color","size","xs","ys"],"title":"CommentAnnotationPath","description":"A path in a comment annotation"},"AttachmentToDownloadDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"uploader_id":{"type":"string","format":"uuid","title":"Uploader Id"},"uploaded":{"type":"boolean","title":"Uploaded"},"name":{"type":"string","title":"Name"},"mime_type":{"type":"string","title":"Mime Type"},"size":{"type":"integer","title":"Size"},"download_url":{"type":"string","title":"Download Url"}},"type":"object","required":["id","drive_id","uploader_id","uploaded","name","mime_type","size","download_url"],"title":"AttachmentToDownloadDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## React to a comment

> React to a comment

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/{asset_id}/comments/{comment_id}/react":{"put":{"tags":["assets","comments"],"summary":"React to a comment","description":"React to a comment","operationId":"react_to_comment_handler_assets__asset_id__comments__comment_id__react_put","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The asset id","description":"The id of the asset that the comment is on"},"description":"The id of the asset that the comment is on"},{"name":"comment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The comment id","description":"The id of the comment to react to"},"description":"The id of the comment to react to"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_react_to_comment_handler_assets__asset_id__comments__comment_id__react_put"}}}},"responses":{"200":{"description":"The comment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_react_to_comment_handler_assets__asset_id__comments__comment_id__react_put":{"properties":{"drive_id":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this comment is in"},"reaction_to_add":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reaction to add","description":"The reaction to add to the comment. Either pass this or reaction_to_remove"},"reaction_to_remove":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Reaction id to remove","description":"The id of the reaction to remove. Either pass this or reaction_to_add"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["drive_id"],"title":"Body_react_to_comment_handler_assets__asset_id__comments__comment_id__react_put"},"CommentDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"asset_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Asset Id"},"content":{"type":"string","title":"Content"},"author":{"$ref":"#/components/schemas/UserDTOBase"},"created":{"type":"string","format":"date-time","title":"Created"},"updated":{"type":"string","format":"date-time","title":"Updated"},"resolved":{"type":"boolean","title":"Resolved"},"is_public":{"type":"boolean","title":"Is Public"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"timestamp":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Timestamp"},"duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration"},"replies":{"items":{"$ref":"#/components/schemas/CommentDTO"},"type":"array","title":"Replies","default":[]},"mentions":{"items":{"$ref":"#/components/schemas/Mention"},"type":"array","title":"Mentions","default":[]},"reactions":{"items":{"$ref":"#/components/schemas/ReactionDTO"},"type":"array","title":"Reactions","default":[]},"anchor":{"anyOf":[{"$ref":"#/components/schemas/CommentAnchor"},{"type":"null"}]},"annotation":{"anyOf":[{"items":{"$ref":"#/components/schemas/CommentAnnotationPath"},"type":"array"},{"type":"null"}],"title":"Annotation"},"is_copied":{"type":"boolean","title":"Is Copied","default":false},"attachments":{"items":{"$ref":"#/components/schemas/AttachmentToDownloadDTO"},"type":"array","title":"Attachments","default":[]}},"type":"object","required":["id","asset_id","content","author","created","updated","resolved","is_public","parent_id","timestamp","duration","anchor"],"title":"CommentDTO"},"UserDTOBase":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"}},"type":"object","required":["id","name","email","avatar_url","user_type"],"title":"UserDTOBase"},"UserType":{"type":"string","enum":["regular","group"],"title":"UserType"},"Mention":{"properties":{"user_id":{"type":"string","title":"User Id"},"text":{"type":"string","title":"Text"},"start_index":{"type":"integer","title":"Start Index"},"end_index":{"type":"integer","title":"End Index"},"user_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Name","default":""}},"type":"object","required":["user_id","text","start_index","end_index"],"title":"Mention"},"ReactionDTO":{"properties":{"users":{"items":{"$ref":"#/components/schemas/UserDTOWithCommentId"},"type":"array","title":"Users"},"content":{"type":"string","title":"Content"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["users","content","count"],"title":"ReactionDTO"},"UserDTOWithCommentId":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"},"comment_id":{"type":"string","format":"uuid","title":"Comment Id"}},"type":"object","required":["id","name","email","avatar_url","user_type","comment_id"],"title":"UserDTOWithCommentId"},"CommentAnchor":{"properties":{"x":{"type":"number","title":"X"},"y":{"type":"number","title":"Y"}},"type":"object","required":["x","y"],"title":"CommentAnchor"},"CommentAnnotationPath":{"properties":{"tool":{"type":"string","title":"Tool"},"color":{"type":"string","title":"Color"},"size":{"type":"number","title":"Size"},"xs":{"items":{"type":"number"},"type":"array","title":"Xs"},"ys":{"items":{"type":"number"},"type":"array","title":"Ys"}},"type":"object","required":["tool","color","size","xs","ys"],"title":"CommentAnnotationPath","description":"A path in a comment annotation"},"AttachmentToDownloadDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"uploader_id":{"type":"string","format":"uuid","title":"Uploader Id"},"uploaded":{"type":"boolean","title":"Uploaded"},"name":{"type":"string","title":"Name"},"mime_type":{"type":"string","title":"Mime Type"},"size":{"type":"integer","title":"Size"},"download_url":{"type":"string","title":"Download Url"}},"type":"object","required":["id","drive_id","uploader_id","uploaded","name","mime_type","size","download_url"],"title":"AttachmentToDownloadDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Start the upload process for a comment attachment

> Start the upload process for a comment attachment

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/{asset_id}/comments/attachments":{"post":{"tags":["assets","comments"],"summary":"Start the upload process for a comment attachment","description":"Start the upload process for a comment attachment","operationId":"start_comment_attachment_upload_assets__asset_id__comments_attachments_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The asset id","description":"The id of the asset to create the attachment for"},"description":"The id of the asset to create the attachment for"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_start_comment_attachment_upload_assets__asset_id__comments_attachments_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachmentToUploadDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_start_comment_attachment_upload_assets__asset_id__comments_attachments_post":{"properties":{"drive_id":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive to create the attachment for"},"name":{"type":"string","title":"The name of the attachment","description":"The name of the attachment to be created"},"mime_type":{"type":"string","title":"The mime type of the attachment","description":"The mime type of the attachment to be created"},"size":{"type":"integer","title":"The size of the attachment","description":"The size of the attachment to be created"},"comment_id":{"type":"string","format":"uuid","title":"The comment id","description":"The id of the comment to attach to"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["drive_id","name","mime_type","size","comment_id"],"title":"Body_start_comment_attachment_upload_assets__asset_id__comments_attachments_post"},"AttachmentToUploadDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"uploader_id":{"type":"string","format":"uuid","title":"Uploader Id"},"uploaded":{"type":"boolean","title":"Uploaded"},"name":{"type":"string","title":"Name"},"mime_type":{"type":"string","title":"Mime Type"},"size":{"type":"integer","title":"Size"},"upload_url":{"type":"string","title":"Upload Url"}},"type":"object","required":["id","drive_id","uploader_id","uploaded","name","mime_type","size","upload_url"],"title":"AttachmentToUploadDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Mark the upload of a comment attachment as complete

> Mark the upload of a comment attachment as complete

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/{asset_id}/comments/attachments/{attachment_id}":{"post":{"tags":["assets","comments"],"summary":"Mark the upload of a comment attachment as complete","description":"Mark the upload of a comment attachment as complete","operationId":"mark_comment_attachment_uploaded_assets__asset_id__comments_attachments__attachment_id__post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The asset id","description":"The id of the asset to mark the attachment uploaded for"},"description":"The id of the asset to mark the attachment uploaded for"},{"name":"attachment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The attachment id","description":"The id of the attachment to mark as uploaded"},"description":"The id of the attachment to mark as uploaded"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_mark_comment_attachment_uploaded_assets__asset_id__comments_attachments__attachment_id__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachmentToDownloadDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_mark_comment_attachment_uploaded_assets__asset_id__comments_attachments__attachment_id__post":{"properties":{"drive_id":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive to mark the attachment uploaded for"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["drive_id"],"title":"Body_mark_comment_attachment_uploaded_assets__asset_id__comments_attachments__attachment_id__post"},"AttachmentToDownloadDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"uploader_id":{"type":"string","format":"uuid","title":"Uploader Id"},"uploaded":{"type":"boolean","title":"Uploaded"},"name":{"type":"string","title":"Name"},"mime_type":{"type":"string","title":"Mime Type"},"size":{"type":"integer","title":"Size"},"download_url":{"type":"string","title":"Download Url"}},"type":"object","required":["id","drive_id","uploader_id","uploaded","name","mime_type","size","download_url"],"title":"AttachmentToDownloadDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Paste comments from another asset

> Paste all comments from source asset to target asset

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/{asset_id}/comments/paste":{"post":{"tags":["assets","comments"],"summary":"Paste comments from another asset","description":"Paste all comments from source asset to target asset","operationId":"paste_asset_comments_assets__asset_id__comments_paste_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The target asset id","description":"The id of the asset to paste comments to"},"description":"The id of the asset to paste comments to"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_paste_asset_comments_assets__asset_id__comments_paste_post"}}}},"responses":{"200":{"description":"List of newly created comments","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CommentDTO"},"title":"Response Paste Asset Comments Assets  Asset Id  Comments Paste Post"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_paste_asset_comments_assets__asset_id__comments_paste_post":{"properties":{"source_asset_id":{"type":"string","format":"uuid","title":"The source asset id","description":"The id of the asset to copy comments from"},"drive_id":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["source_asset_id","drive_id"],"title":"Body_paste_asset_comments_assets__asset_id__comments_paste_post"},"CommentDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"asset_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Asset Id"},"content":{"type":"string","title":"Content"},"author":{"$ref":"#/components/schemas/UserDTOBase"},"created":{"type":"string","format":"date-time","title":"Created"},"updated":{"type":"string","format":"date-time","title":"Updated"},"resolved":{"type":"boolean","title":"Resolved"},"is_public":{"type":"boolean","title":"Is Public"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"timestamp":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Timestamp"},"duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration"},"replies":{"items":{"$ref":"#/components/schemas/CommentDTO"},"type":"array","title":"Replies","default":[]},"mentions":{"items":{"$ref":"#/components/schemas/Mention"},"type":"array","title":"Mentions","default":[]},"reactions":{"items":{"$ref":"#/components/schemas/ReactionDTO"},"type":"array","title":"Reactions","default":[]},"anchor":{"anyOf":[{"$ref":"#/components/schemas/CommentAnchor"},{"type":"null"}]},"annotation":{"anyOf":[{"items":{"$ref":"#/components/schemas/CommentAnnotationPath"},"type":"array"},{"type":"null"}],"title":"Annotation"},"is_copied":{"type":"boolean","title":"Is Copied","default":false},"attachments":{"items":{"$ref":"#/components/schemas/AttachmentToDownloadDTO"},"type":"array","title":"Attachments","default":[]}},"type":"object","required":["id","asset_id","content","author","created","updated","resolved","is_public","parent_id","timestamp","duration","anchor"],"title":"CommentDTO"},"UserDTOBase":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"}},"type":"object","required":["id","name","email","avatar_url","user_type"],"title":"UserDTOBase"},"UserType":{"type":"string","enum":["regular","group"],"title":"UserType"},"Mention":{"properties":{"user_id":{"type":"string","title":"User Id"},"text":{"type":"string","title":"Text"},"start_index":{"type":"integer","title":"Start Index"},"end_index":{"type":"integer","title":"End Index"},"user_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Name","default":""}},"type":"object","required":["user_id","text","start_index","end_index"],"title":"Mention"},"ReactionDTO":{"properties":{"users":{"items":{"$ref":"#/components/schemas/UserDTOWithCommentId"},"type":"array","title":"Users"},"content":{"type":"string","title":"Content"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["users","content","count"],"title":"ReactionDTO"},"UserDTOWithCommentId":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"},"comment_id":{"type":"string","format":"uuid","title":"Comment Id"}},"type":"object","required":["id","name","email","avatar_url","user_type","comment_id"],"title":"UserDTOWithCommentId"},"CommentAnchor":{"properties":{"x":{"type":"number","title":"X"},"y":{"type":"number","title":"Y"}},"type":"object","required":["x","y"],"title":"CommentAnchor"},"CommentAnnotationPath":{"properties":{"tool":{"type":"string","title":"Tool"},"color":{"type":"string","title":"Color"},"size":{"type":"number","title":"Size"},"xs":{"items":{"type":"number"},"type":"array","title":"Xs"},"ys":{"items":{"type":"number"},"type":"array","title":"Ys"}},"type":"object","required":["tool","color","size","xs","ys"],"title":"CommentAnnotationPath","description":"A path in a comment annotation"},"AttachmentToDownloadDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"uploader_id":{"type":"string","format":"uuid","title":"Uploader Id"},"uploaded":{"type":"boolean","title":"Uploaded"},"name":{"type":"string","title":"Name"},"mime_type":{"type":"string","title":"Mime Type"},"size":{"type":"integer","title":"Size"},"download_url":{"type":"string","title":"Download Url"}},"type":"object","required":["id","drive_id","uploader_id","uploaded","name","mime_type","size","download_url"],"title":"AttachmentToDownloadDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Export comments in various formats

> Export all comments for an asset in the specified format

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/{asset_id}/comments/export":{"get":{"tags":["assets","comments"],"summary":"Export comments in various formats","description":"Export all comments for an asset in the specified format","operationId":"export_comments_assets__asset_id__comments_export_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The asset id","description":"The id of the asset to export comments for"},"description":"The id of the asset to export comments for"},{"name":"type","in":"query","required":true,"schema":{"$ref":"#/components/schemas/ExportType","title":"Export type","description":"The type of export to generate"},"description":"The type of export to generate"},{"name":"drive_id","in":"query","required":false,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this asset is in"},"description":"The id of the drive this asset is in"},{"name":"authorization","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The authorization token","description":"The authorization token to use to fetch the export"},"description":"The authorization token to use to fetch the export"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_export_comments_assets__asset_id__comments_export_get"}}}},"responses":{"200":{"description":"Exported comments file","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"ExportType":{"type":"string","enum":["csv","txt"],"title":"ExportType"},"Body_export_comments_assets__asset_id__comments_export_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_export_comments_assets__asset_id__comments_export_get"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get the transcription utterances for an asset if it exists

> Get the transcription utterances for an asset if it exists

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/{asset_id}/transcription/utterances":{"get":{"tags":["assets","transcription"],"summary":"Get the transcription utterances for an asset if it exists","description":"Get the transcription utterances for an asset if it exists","operationId":"get_transcription_utterances_assets__asset_id__transcription_utterances_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The asset id","description":"The asset to get the transcription for"},"description":"The asset to get the transcription for"},{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this asset is in"},"description":"The id of the drive this asset is in"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_transcription_utterances_assets__asset_id__transcription_utterances_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/TranscriptionUtteranceDTO"}},{"type":"null"}],"title":"Response Get Transcription Utterances Assets  Asset Id  Transcription Utterances Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_transcription_utterances_assets__asset_id__transcription_utterances_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_transcription_utterances_assets__asset_id__transcription_utterances_get"},"TranscriptionUtteranceDTO":{"properties":{"speaker":{"type":"string","title":"Speaker"},"start":{"type":"number","title":"Start"},"end":{"type":"number","title":"End"},"text":{"type":"string","title":"Text"},"words":{"items":{"$ref":"#/components/schemas/TranscriptionSegmentDTO"},"type":"array","title":"Words"}},"type":"object","required":["speaker","start","end","text","words"],"title":"TranscriptionUtteranceDTO"},"TranscriptionSegmentDTO":{"properties":{"start":{"type":"number","title":"Start"},"end":{"type":"number","title":"End"},"text":{"type":"string","title":"Text"}},"type":"object","required":["start","end","text"],"title":"TranscriptionSegmentDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get the transcription segments for an asset if it exists

> Get the transcription segments for an asset if it exists

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/{asset_id}/transcription/segments":{"get":{"tags":["assets","transcription"],"summary":"Get the transcription segments for an asset if it exists","description":"Get the transcription segments for an asset if it exists","operationId":"get_transcription_segments_assets__asset_id__transcription_segments_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The asset id","description":"The asset to get the transcription for"},"description":"The asset to get the transcription for"},{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this asset is in"},"description":"The id of the drive this asset is in"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_transcription_segments_assets__asset_id__transcription_segments_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/TranscriptionSegmentDTO"}},{"type":"null"}],"title":"Response Get Transcription Segments Assets  Asset Id  Transcription Segments Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_transcription_segments_assets__asset_id__transcription_segments_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_transcription_segments_assets__asset_id__transcription_segments_get"},"TranscriptionSegmentDTO":{"properties":{"start":{"type":"number","title":"Start"},"end":{"type":"number","title":"End"},"text":{"type":"string","title":"Text"}},"type":"object","required":["start","end","text"],"title":"TranscriptionSegmentDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## GET /assets/{asset\_id}/transcription/file

> Export the transcription as a file for an asset if it exists

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/{asset_id}/transcription/file":{"get":{"tags":["assets","transcription"],"summary":"Export the transcription as a file for an asset if it exists","operationId":"get_transcription_assets__asset_id__transcription_file_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The asset id","description":"The asset to get the transcription for"},"description":"The asset to get the transcription for"},{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this asset is in"},"description":"The id of the drive this asset is in"},{"name":"type","in":"query","required":false,"schema":{"$ref":"#/components/schemas/TranscriptionOutput","title":"Type","description":"The type of transcription to get","default":"vtt"},"description":"The type of transcription to get"},{"name":"authorization","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The authorization token","description":"The authorization token to use to fetch the preview"},"description":"The authorization token to use to fetch the preview"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_transcription_assets__asset_id__transcription_file_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Get Transcription Assets  Asset Id  Transcription File Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"TranscriptionOutput":{"type":"string","enum":["srt","scriptsync","vtt","txt"],"title":"TranscriptionOutput"},"Body_get_transcription_assets__asset_id__transcription_file_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_transcription_assets__asset_id__transcription_file_get"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get AI-generated conversation starters for the transcript

> Generate 3 pertinent conversation starters based on the transcript content using LeMuR AI.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/{asset_id}/transcription/suggestions":{"get":{"tags":["assets","transcription"],"summary":"Get AI-generated conversation starters for the transcript","description":"Generate 3 pertinent conversation starters based on the transcript content using LeMuR AI.","operationId":"get_conversation_suggestions_assets__asset_id__transcription_suggestions_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The asset id","description":"The asset to get suggestions for"},"description":"The asset to get suggestions for"},{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this asset is in"},"description":"The id of the drive this asset is in"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_conversation_suggestions_assets__asset_id__transcription_suggestions_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptionSuggestionsResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_conversation_suggestions_assets__asset_id__transcription_suggestions_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_conversation_suggestions_assets__asset_id__transcription_suggestions_get"},"TranscriptionSuggestionsResponse":{"properties":{"suggestions":{"items":{"type":"string"},"type":"array","title":"Suggestions"}},"type":"object","required":["suggestions"],"title":"TranscriptionSuggestionsResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Chat with the transcript using LeMuR AI

> Chat with the transcript using AssemblyAI's LeMuR (powered by Claude 3.5 Sonnet).\
> The AI will provide timestamps in \[MM:SS] or \[HH:MM:SS] format that can be clicked in the UI.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/{asset_id}/transcription/chat":{"post":{"tags":["assets","transcription"],"summary":"Chat with the transcript using LeMuR AI","description":"Chat with the transcript using AssemblyAI's LeMuR (powered by Claude 3.5 Sonnet).\nThe AI will provide timestamps in [MM:SS] or [HH:MM:SS] format that can be clicked in the UI.","operationId":"chat_with_transcription_assets__asset_id__transcription_chat_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The asset id","description":"The asset to chat with the transcription for"},"description":"The asset to chat with the transcription for"},{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this asset is in"},"description":"The id of the drive this asset is in"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_chat_with_transcription_assets__asset_id__transcription_chat_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptionChatResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_chat_with_transcription_assets__asset_id__transcription_chat_post":{"properties":{"request":{"$ref":"#/components/schemas/TranscriptionChatRequest"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["request"],"title":"Body_chat_with_transcription_assets__asset_id__transcription_chat_post"},"TranscriptionChatRequest":{"properties":{"message":{"type":"string","title":"Message"},"conversation_history":{"anyOf":[{"items":{"$ref":"#/components/schemas/TranscriptionChatMessage"},"type":"array"},{"type":"null"}],"title":"Conversation History"}},"type":"object","required":["message"],"title":"TranscriptionChatRequest"},"TranscriptionChatMessage":{"properties":{"role":{"type":"string","enum":["user","assistant"],"title":"Role"},"content":{"type":"string","title":"Content"}},"type":"object","required":["role","content"],"title":"TranscriptionChatMessage"},"TranscriptionChatResponse":{"properties":{"response":{"type":"string","title":"Response"}},"type":"object","required":["response"],"title":"TranscriptionChatResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get all preview images for an asset with signed urls

> Get all preview images for an asset, including signed URLs for each preview image.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/{asset_id}/previews":{"get":{"tags":["assets"],"summary":"Get all preview images for an asset with signed urls","description":"Get all preview images for an asset, including signed URLs for each preview image.","operationId":"get_asset_previews_assets__asset_id__previews_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The asset id","description":"The id of the asset to retrieve"},"description":"The id of the asset to retrieve"},{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this asset is in"},"description":"The id of the drive this asset is in"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_asset_previews_assets__asset_id__previews_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PreviewDTO"},"title":"Response Get Asset Previews Assets  Asset Id  Previews Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_asset_previews_assets__asset_id__previews_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_asset_previews_assets__asset_id__previews_get"},"PreviewDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"frame":{"type":"integer","title":"Frame"},"signed_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Url"}},"type":"object","required":["id","frame"],"title":"PreviewDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## GET /assets/usage

> Get the usage of a drive's assets for analytics

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/usage":{"get":{"tags":["assets"],"summary":"Get the usage of a drive's assets for analytics","operationId":"get_asset_usage_assets_usage_get","parameters":[{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive we get asset usage for"},"description":"The id of the drive we get asset usage for"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_asset_usage_assets_usage_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetUsageDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_asset_usage_assets_usage_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_asset_usage_assets_usage_get"},"AssetUsageDTO":{"properties":{"num_assets":{"type":"integer","title":"Num Assets"},"num_ai_assets":{"type":"integer","title":"Num Ai Assets"},"bytes":{"type":"integer","title":"Bytes"},"types":{"additionalProperties":{"type":"integer"},"propertyNames":{"$ref":"#/components/schemas/AssetType"},"type":"object","title":"Types"},"collections":{"type":"integer","title":"Collections"}},"type":"object","required":["num_assets","num_ai_assets","bytes","types","collections"],"title":"AssetUsageDTO"},"AssetType":{"type":"string","enum":["IMAGE","VIDEO","AUDIO","DOCUMENT","HDR","HDRI","PHOTOSHOP","ILLUSTRATOR","EXR","OBJECT","VECTOR","OTHER","MAYA","MAX","BLENDER","HOUDINI","UNREAL","UNITY","AFTER_EFFECTS","MOGRT"],"title":"AssetType"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get all the faces for an asset

> Get all the faces an asset contains

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/{asset_id}/faces":{"get":{"tags":["assets"],"summary":"Get all the faces for an asset","description":"Get all the faces an asset contains","operationId":"get_asset_faces_assets__asset_id__faces_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The asset id","description":"The asset to get the faces for"},"description":"The asset to get the faces for"},{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this asset is in"},"description":"The id of the drive this asset is in"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_asset_faces_assets__asset_id__faces_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FaceDTO"},"title":"Response Get Asset Faces Assets  Asset Id  Faces Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_asset_faces_assets__asset_id__faces_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_asset_faces_assets__asset_id__faces_get"},"FaceDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"bbox":{"additionalProperties":{"type":"integer"},"type":"object","title":"Bbox"},"face_preview":{"$ref":"#/components/schemas/PreviewDTO"},"individual_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Individual Id"}},"type":"object","required":["id","bbox","face_preview"],"title":"FaceDTO"},"PreviewDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"frame":{"type":"integer","title":"Frame"},"signed_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Url"}},"type":"object","required":["id","frame"],"title":"PreviewDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get all mentionable users on comments for an asset

> Get all mentionable users on comments for an asset

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/{asset_id}/mentionable-users":{"get":{"tags":["assets"],"summary":"Get all mentionable users on comments for an asset","description":"Get all mentionable users on comments for an asset","operationId":"get_asset_mentionable_users_assets__asset_id__mentionable_users_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The asset id","description":"The id of the asset to retrieve"},"description":"The id of the asset to retrieve"},{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this asset is in"},"description":"The id of the drive this asset is in"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_asset_mentionable_users_assets__asset_id__mentionable_users_get"}}}},"responses":{"200":{"description":"A list of mentionable users on comments for the asset","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserDTOBase"},"title":"Response Get Asset Mentionable Users Assets  Asset Id  Mentionable Users Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_asset_mentionable_users_assets__asset_id__mentionable_users_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_asset_mentionable_users_assets__asset_id__mentionable_users_get"},"UserDTOBase":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"}},"type":"object","required":["id","name","email","avatar_url","user_type"],"title":"UserDTOBase"},"UserType":{"type":"string","enum":["regular","group"],"title":"UserType"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## GET /assets/{asset\_id}/clip

> Clip a video between two timestamps (hybrid head re-encode + tail copy)

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/{asset_id}/clip":{"get":{"tags":["assets"],"summary":"Clip a video between two timestamps (hybrid head re-encode + tail copy)","operationId":"get_clips_for_a_video_assets__asset_id__clip_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The asset id","description":"The id of the asset to retrieve"},"description":"The id of the asset to retrieve"},{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this asset is in"},"description":"The id of the drive this asset is in"},{"name":"start_time","in":"query","required":true,"schema":{"type":"number","title":"Start time in seconds","description":"The start time of the clip in seconds"},"description":"The start time of the clip in seconds"},{"name":"end_time","in":"query","required":true,"schema":{"type":"number","title":"End time in seconds","description":"The end time of the clip in seconds"},"description":"The end time of the clip in seconds"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_clips_for_a_video_assets__asset_id__clip_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Get Clips For A Video Assets  Asset Id  Clip Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_clips_for_a_video_assets__asset_id__clip_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_clips_for_a_video_assets__asset_id__clip_get"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get a signed download URL for an asset's data

> Get a signed download URL for an asset's data based on the origin type

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/{asset_id}/download":{"get":{"tags":["assets"],"summary":"Get a signed download URL for an asset's data","description":"Get a signed download URL for an asset's data based on the origin type","operationId":"get_asset_download_url_assets__asset_id__download_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The asset id","description":"The id of the asset to retrieve"},"description":"The id of the asset to retrieve"},{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this asset is in"},"description":"The id of the drive this asset is in"},{"name":"origin_type","in":"query","required":true,"schema":{"$ref":"#/components/schemas/OriginType","title":"The origin type","description":"The origin of the asset's data to fetch"},"description":"The origin of the asset's data to fetch"},{"name":"name","in":"query","required":false,"schema":{"type":"string","title":"The name of the file to download as","description":"The name of the file to download as"},"description":"The name of the file to download as"},{"name":"download","in":"query","required":false,"schema":{"type":"boolean","title":"Indicator for downloading vs viewing the file","description":"Whether to download the file or view it inline","default":true},"description":"Whether to download the file or view it inline"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_asset_download_url_assets__asset_id__download_get"}}}},"responses":{"200":{"description":"A signed download URL","content":{"application/json":{"schema":{"type":"string","title":"Response Get Asset Download Url Assets  Asset Id  Download Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"OriginType":{"type":"string","enum":["SOURCE","PROXY"],"title":"OriginType","description":"Enum for asset data origin types"},"Body_get_asset_download_url_assets__asset_id__download_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_asset_download_url_assets__asset_id__download_get"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## GET /assets/{asset\_id}/source

> Get an asset source by redirecting to the signed url

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/{asset_id}/source":{"get":{"tags":["assets"],"summary":"Get an asset source by redirecting to the signed url","operationId":"get_asset_source_assets__asset_id__source_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The asset id","description":"The id of the asset to retrieve"},"description":"The id of the asset to retrieve"},{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this asset is in"},"description":"The id of the drive this asset is in"},{"name":"name","in":"query","required":false,"schema":{"type":"string","title":"The name of the file to download as","description":"The name of the file to download as"},"description":"The name of the file to download as"},{"name":"authorization","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The authorization token","description":"The authorization token to use to fetch the preview"},"description":"The authorization token to use to fetch the preview"},{"name":"shade-collection-id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Collection ID","description":"The collection id to authorize against, if not provided will use the default collection for the user."},"description":"The collection id to authorize against, if not provided will use the default collection for the user."},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_asset_source_assets__asset_id__source_get"}}}},"responses":{"200":{"description":"A signed download URL","content":{"application/json":{"schema":{"title":"Response Get Asset Source Assets  Asset Id  Source Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_asset_source_assets__asset_id__source_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_asset_source_assets__asset_id__source_get"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get an asset from its path

> Get an asset from its path

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/path":{"get":{"tags":["assets"],"summary":"Get an asset from its path","description":"Get an asset from its path","operationId":"get_asset_from_path_route_assets_path_get","parameters":[{"name":"path","in":"query","required":true,"schema":{"type":"string","title":"The path","description":"The path of the asset to retrieve"},"description":"The path of the asset to retrieve"},{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this asset is in"},"description":"The id of the drive this asset is in"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_asset_from_path_route_assets_path_get"}}}},"responses":{"200":{"description":"The asset","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_asset_from_path_route_assets_path_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_asset_from_path_route_assets_path_get"},"AssetDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"path":{"type":"string","title":"Path"},"name":{"type":"string","title":"Name"},"extension":{"type":"string","title":"Extension"},"updated":{"type":"string","format":"date-time","title":"Updated"},"created":{"type":"string","format":"date-time","title":"Created"},"type":{"$ref":"#/components/schemas/AssetType"},"size_bytes":{"type":"integer","title":"Size Bytes"},"stack_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Stack Id"},"stack_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stack Number"},"is_fs_draft_blob":{"type":"boolean","title":"Is Fs Draft Blob"},"is_fs_null_blob":{"type":"boolean","title":"Is Fs Null Blob"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"ai_indexed":{"type":"boolean","title":"Ai Indexed"},"system_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"System Metadata","default":{}},"custom_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Custom Metadata","default":{}},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"palette":{"items":{"items":{"type":"integer"},"type":"array"},"type":"array","title":"Palette"},"ocr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ocr"},"transcription_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Transcription Id"},"faces_present":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Faces Present"},"content_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Content Length"},"preview_job_state":{"$ref":"#/components/schemas/JobState"},"metadata_job_state":{"$ref":"#/components/schemas/JobState"},"core_vision_job_state":{"$ref":"#/components/schemas/JobState"},"color_palette_job_state":{"$ref":"#/components/schemas/JobState"},"core_audio_job_state":{"$ref":"#/components/schemas/JobState"},"audio_job_state":{"$ref":"#/components/schemas/JobState"},"facial_recognition_job_state":{"$ref":"#/components/schemas/JobState"},"proxy_job_state":{"$ref":"#/components/schemas/JobState"},"audio_proxy_job_state":{"$ref":"#/components/schemas/JobState"},"transcription_job_state":{"$ref":"#/components/schemas/JobState"},"objects":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Objects"},"texture_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Texture Data"},"integration_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Integration Data"},"preview_images":{"items":{"$ref":"#/components/schemas/PreviewDTO"},"type":"array","title":"Preview Images"},"custom_thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}]},"proxy":{"anyOf":[{"$ref":"#/components/schemas/ProxyDTO"},{"type":"null"}]},"audio_proxy":{"anyOf":[{"$ref":"#/components/schemas/ProxyDTO"},{"type":"null"}]}},"type":"object","required":["id","drive_id","path","name","extension","updated","created","type","size_bytes","is_fs_draft_blob","is_fs_null_blob","ai_indexed","palette","preview_job_state","metadata_job_state","core_vision_job_state","color_palette_job_state","core_audio_job_state","facial_recognition_job_state","proxy_job_state","audio_proxy_job_state","transcription_job_state","preview_images"],"title":"AssetDTO","description":"Full asset DTO with relationship fields that require eager loading."},"AssetType":{"type":"string","enum":["IMAGE","VIDEO","AUDIO","DOCUMENT","HDR","HDRI","PHOTOSHOP","ILLUSTRATOR","EXR","OBJECT","VECTOR","OTHER","MAYA","MAX","BLENDER","HOUDINI","UNREAL","UNITY","AFTER_EFFECTS","MOGRT"],"title":"AssetType"},"JobState":{"type":"string","enum":["NOT_STARTED","IN_PROGRESS","COMPLETED","FAILED","INSUFFICIENT_CREDITS"],"title":"JobState","description":"Enum for asset job states"},"PreviewDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"frame":{"type":"integer","title":"Frame"},"signed_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Url"}},"type":"object","required":["id","frame"],"title":"PreviewDTO"},"ProxyDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"}},"type":"object","required":["id"],"title":"ProxyDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Bulk update asset metadata attributes

> Either pass in asset\_ids/metadata\_attributes OR assets.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/bulk/metadata/values":{"put":{"tags":["assets"],"summary":"Bulk update asset metadata attributes","description":"Either pass in asset_ids/metadata_attributes OR assets.","operationId":"bulk_update_asset_metadata_attributes_assets_bulk_metadata_values_put","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_bulk_update_asset_metadata_attributes_assets_bulk_metadata_values_put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BulkMetadataAttributeUpdateResponseDTO"},"title":"Response Bulk Update Asset Metadata Attributes Assets Bulk Metadata Values Put"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_bulk_update_asset_metadata_attributes_assets_bulk_metadata_values_put":{"properties":{"asset_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"The asset id","description":"The id of the assets to be updated"},"metadata_attributes":{"anyOf":[{"items":{"$ref":"#/components/schemas/BulkMetadataAttributeUpdate"},"type":"array"},{"type":"null"}],"title":"Metadata Attribute ID","description":"The id and values of the metadata attributes to update"},"asset_ids_with_metadata_attributes":{"anyOf":[{"items":{"$ref":"#/components/schemas/BulkMetadataAttributeUpdatePerAsset"},"type":"array"},{"type":"null"}],"title":"Asset to be modified with the corresponding metadata","description":"The asset ids and their corresponding metadata attributes to update"},"drive_id":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this asset is in"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["drive_id"],"title":"Body_bulk_update_asset_metadata_attributes_assets_bulk_metadata_values_put"},"BulkMetadataAttributeUpdate":{"properties":{"id":{"type":"string","title":"Id"},"value":{"title":"Value"},"append":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Append","default":false}},"type":"object","required":["id","value"],"title":"BulkMetadataAttributeUpdate"},"BulkMetadataAttributeUpdatePerAsset":{"properties":{"asset_id":{"type":"string","format":"uuid","title":"Asset Id"},"metadata_attributes":{"items":{"$ref":"#/components/schemas/BulkMetadataAttributeUpdate"},"type":"array","title":"Metadata Attributes"}},"type":"object","required":["asset_id","metadata_attributes"],"title":"BulkMetadataAttributeUpdatePerAsset"},"BulkMetadataAttributeUpdateResponseDTO":{"properties":{"asset_id":{"type":"string","format":"uuid","title":"Asset Id"},"updated_metadata_attribute_ids":{"items":{"type":"string"},"type":"array","title":"Updated Metadata Attribute Ids"}},"type":"object","required":["asset_id","updated_metadata_attribute_ids"],"title":"BulkMetadataAttributeUpdateResponseDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## GET /assets/stack/{stack\_id}

> Get all assets for a stack

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/stack/{stack_id}":{"get":{"tags":["assets"],"summary":"Get all assets for a stack","operationId":"get_asset_stack_route_assets_stack__stack_id__get","parameters":[{"name":"stack_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The stack id","description":"The id of the stack to retrieve assets for"},"description":"The id of the stack to retrieve assets for"},{"name":"directory_path","in":"query","required":true,"schema":{"type":"string","title":"The directory path","description":"The directory path that the stack is located under"},"description":"The directory path that the stack is located under"},{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this stack is in"},"description":"The id of the drive this stack is in"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_asset_stack_route_assets_stack__stack_id__get"}}}},"responses":{"200":{"description":"A list of assets for the stack","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AssetDTO"},"title":"Response Get Asset Stack Route Assets Stack  Stack Id  Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_asset_stack_route_assets_stack__stack_id__get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_asset_stack_route_assets_stack__stack_id__get"},"AssetDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"path":{"type":"string","title":"Path"},"name":{"type":"string","title":"Name"},"extension":{"type":"string","title":"Extension"},"updated":{"type":"string","format":"date-time","title":"Updated"},"created":{"type":"string","format":"date-time","title":"Created"},"type":{"$ref":"#/components/schemas/AssetType"},"size_bytes":{"type":"integer","title":"Size Bytes"},"stack_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Stack Id"},"stack_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stack Number"},"is_fs_draft_blob":{"type":"boolean","title":"Is Fs Draft Blob"},"is_fs_null_blob":{"type":"boolean","title":"Is Fs Null Blob"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"ai_indexed":{"type":"boolean","title":"Ai Indexed"},"system_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"System Metadata","default":{}},"custom_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Custom Metadata","default":{}},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"palette":{"items":{"items":{"type":"integer"},"type":"array"},"type":"array","title":"Palette"},"ocr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ocr"},"transcription_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Transcription Id"},"faces_present":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Faces Present"},"content_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Content Length"},"preview_job_state":{"$ref":"#/components/schemas/JobState"},"metadata_job_state":{"$ref":"#/components/schemas/JobState"},"core_vision_job_state":{"$ref":"#/components/schemas/JobState"},"color_palette_job_state":{"$ref":"#/components/schemas/JobState"},"core_audio_job_state":{"$ref":"#/components/schemas/JobState"},"audio_job_state":{"$ref":"#/components/schemas/JobState"},"facial_recognition_job_state":{"$ref":"#/components/schemas/JobState"},"proxy_job_state":{"$ref":"#/components/schemas/JobState"},"audio_proxy_job_state":{"$ref":"#/components/schemas/JobState"},"transcription_job_state":{"$ref":"#/components/schemas/JobState"},"objects":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Objects"},"texture_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Texture Data"},"integration_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Integration Data"},"preview_images":{"items":{"$ref":"#/components/schemas/PreviewDTO"},"type":"array","title":"Preview Images"},"custom_thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}]},"proxy":{"anyOf":[{"$ref":"#/components/schemas/ProxyDTO"},{"type":"null"}]},"audio_proxy":{"anyOf":[{"$ref":"#/components/schemas/ProxyDTO"},{"type":"null"}]}},"type":"object","required":["id","drive_id","path","name","extension","updated","created","type","size_bytes","is_fs_draft_blob","is_fs_null_blob","ai_indexed","palette","preview_job_state","metadata_job_state","core_vision_job_state","color_palette_job_state","core_audio_job_state","facial_recognition_job_state","proxy_job_state","audio_proxy_job_state","transcription_job_state","preview_images"],"title":"AssetDTO","description":"Full asset DTO with relationship fields that require eager loading."},"AssetType":{"type":"string","enum":["IMAGE","VIDEO","AUDIO","DOCUMENT","HDR","HDRI","PHOTOSHOP","ILLUSTRATOR","EXR","OBJECT","VECTOR","OTHER","MAYA","MAX","BLENDER","HOUDINI","UNREAL","UNITY","AFTER_EFFECTS","MOGRT"],"title":"AssetType"},"JobState":{"type":"string","enum":["NOT_STARTED","IN_PROGRESS","COMPLETED","FAILED","INSUFFICIENT_CREDITS"],"title":"JobState","description":"Enum for asset job states"},"PreviewDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"frame":{"type":"integer","title":"Frame"},"signed_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Url"}},"type":"object","required":["id","frame"],"title":"PreviewDTO"},"ProxyDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"}},"type":"object","required":["id"],"title":"ProxyDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Create a new stack from a list of assets

> Create a new stack from a list of assets

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/stack":{"post":{"tags":["assets"],"summary":"Create a new stack from a list of assets","description":"Create a new stack from a list of assets","operationId":"create_asset_stack_route_assets_stack_post","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_create_asset_stack_route_assets_stack_post"}}}},"responses":{"200":{"description":"The ID of the created stack","content":{"application/json":{"schema":{"type":"string","format":"uuid","title":"Response Create Asset Stack Route Assets Stack Post"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_create_asset_stack_route_assets_stack_post":{"properties":{"asset_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Asset IDs","description":"List of asset IDs to create a stack from"},"drive_id":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive these assets are in"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["asset_ids","drive_id"],"title":"Body_create_asset_stack_route_assets_stack_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Add an asset to a stack

> Add an asset to a stack

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/{asset_id}/stack":{"post":{"tags":["assets"],"summary":"Add an asset to a stack","description":"Add an asset to a stack","operationId":"add_asset_to_stack_route_assets__asset_id__stack_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The asset id","description":"The id of the asset to add to the stack"},"description":"The id of the asset to add to the stack"},{"name":"target_asset_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The target asset id","description":"The id of an asset in the stack to add the asset to"},"description":"The id of an asset in the stack to add the asset to"},{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this asset is in"},"description":"The id of the drive this asset is in"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_add_asset_to_stack_route_assets__asset_id__stack_post"}}}},"responses":{"200":{"description":"The stack number of the added asset","content":{"application/json":{"schema":{"type":"integer","title":"Response Add Asset To Stack Route Assets  Asset Id  Stack Post"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_add_asset_to_stack_route_assets__asset_id__stack_post":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_add_asset_to_stack_route_assets__asset_id__stack_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Remove an asset from its stack

> Remove an asset from its stack

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/{asset_id}/stack":{"delete":{"tags":["assets"],"summary":"Remove an asset from its stack","description":"Remove an asset from its stack","operationId":"remove_asset_from_stack_route_assets__asset_id__stack_delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The asset id","description":"The id of the asset to remove from its stack"},"description":"The id of the asset to remove from its stack"},{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this asset is in"},"description":"The id of the drive this asset is in"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_remove_asset_from_stack_route_assets__asset_id__stack_delete"}}}},"responses":{"200":{"description":"Whether the asset was removed from the stack","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_remove_asset_from_stack_route_assets__asset_id__stack_delete":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_remove_asset_from_stack_route_assets__asset_id__stack_delete"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Move an asset to a new position within its stack

> Move an asset to a new position within its stack

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/{asset_id}/stack/move":{"put":{"tags":["assets"],"summary":"Move an asset to a new position within its stack","description":"Move an asset to a new position within its stack","operationId":"move_asset_in_stack_route_assets__asset_id__stack_move_put","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The asset id","description":"The id of the asset to move within the stack"},"description":"The id of the asset to move within the stack"},{"name":"new_stack_number","in":"query","required":true,"schema":{"type":"integer","title":"New stack number","description":"The new stack number position for the asset"},"description":"The new stack number position for the asset"},{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this asset is in"},"description":"The id of the drive this asset is in"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_move_asset_in_stack_route_assets__asset_id__stack_move_put"}}}},"responses":{"200":{"description":"Whether the asset was successfully moved","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_move_asset_in_stack_route_assets__asset_id__stack_move_put":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_move_asset_in_stack_route_assets__asset_id__stack_move_put"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Rerun transcription for an asset

> Rerun transcription for an asset. If the asset was previously completed with no dialogue, it will skip the dialogue classifier.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/{asset_id}/transcription-override":{"post":{"tags":["assets"],"summary":"Rerun transcription for an asset","description":"Rerun transcription for an asset. If the asset was previously completed with no dialogue, it will skip the dialogue classifier.","operationId":"transcription_override_route_assets__asset_id__transcription_override_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The asset id","description":"The id of the asset to rerun transcription for"},"description":"The id of the asset to rerun transcription for"},{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this asset is in"},"description":"The id of the drive this asset is in"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_transcription_override_route_assets__asset_id__transcription_override_post"}}}},"responses":{"200":{"description":"Success status","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Transcription Override Route Assets  Asset Id  Transcription Override Post"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_transcription_override_route_assets__asset_id__transcription_override_post":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_transcription_override_route_assets__asset_id__transcription_override_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get an asset

> Get an asset

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/{asset_id}":{"get":{"tags":["assets"],"summary":"Get an asset","description":"Get an asset","operationId":"get_asset_assets__asset_id__get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The asset id","description":"The id of the asset to retrieve"},"description":"The id of the asset to retrieve"},{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this asset is in"},"description":"The id of the drive this asset is in"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_asset_assets__asset_id__get"}}}},"responses":{"200":{"description":"The asset","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_asset_assets__asset_id__get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_asset_assets__asset_id__get"},"AssetDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"path":{"type":"string","title":"Path"},"name":{"type":"string","title":"Name"},"extension":{"type":"string","title":"Extension"},"updated":{"type":"string","format":"date-time","title":"Updated"},"created":{"type":"string","format":"date-time","title":"Created"},"type":{"$ref":"#/components/schemas/AssetType"},"size_bytes":{"type":"integer","title":"Size Bytes"},"stack_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Stack Id"},"stack_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stack Number"},"is_fs_draft_blob":{"type":"boolean","title":"Is Fs Draft Blob"},"is_fs_null_blob":{"type":"boolean","title":"Is Fs Null Blob"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"ai_indexed":{"type":"boolean","title":"Ai Indexed"},"system_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"System Metadata","default":{}},"custom_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Custom Metadata","default":{}},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"palette":{"items":{"items":{"type":"integer"},"type":"array"},"type":"array","title":"Palette"},"ocr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ocr"},"transcription_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Transcription Id"},"faces_present":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Faces Present"},"content_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Content Length"},"preview_job_state":{"$ref":"#/components/schemas/JobState"},"metadata_job_state":{"$ref":"#/components/schemas/JobState"},"core_vision_job_state":{"$ref":"#/components/schemas/JobState"},"color_palette_job_state":{"$ref":"#/components/schemas/JobState"},"core_audio_job_state":{"$ref":"#/components/schemas/JobState"},"audio_job_state":{"$ref":"#/components/schemas/JobState"},"facial_recognition_job_state":{"$ref":"#/components/schemas/JobState"},"proxy_job_state":{"$ref":"#/components/schemas/JobState"},"audio_proxy_job_state":{"$ref":"#/components/schemas/JobState"},"transcription_job_state":{"$ref":"#/components/schemas/JobState"},"objects":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Objects"},"texture_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Texture Data"},"integration_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Integration Data"},"preview_images":{"items":{"$ref":"#/components/schemas/PreviewDTO"},"type":"array","title":"Preview Images"},"custom_thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}]},"proxy":{"anyOf":[{"$ref":"#/components/schemas/ProxyDTO"},{"type":"null"}]},"audio_proxy":{"anyOf":[{"$ref":"#/components/schemas/ProxyDTO"},{"type":"null"}]}},"type":"object","required":["id","drive_id","path","name","extension","updated","created","type","size_bytes","is_fs_draft_blob","is_fs_null_blob","ai_indexed","palette","preview_job_state","metadata_job_state","core_vision_job_state","color_palette_job_state","core_audio_job_state","facial_recognition_job_state","proxy_job_state","audio_proxy_job_state","transcription_job_state","preview_images"],"title":"AssetDTO","description":"Full asset DTO with relationship fields that require eager loading."},"AssetType":{"type":"string","enum":["IMAGE","VIDEO","AUDIO","DOCUMENT","HDR","HDRI","PHOTOSHOP","ILLUSTRATOR","EXR","OBJECT","VECTOR","OTHER","MAYA","MAX","BLENDER","HOUDINI","UNREAL","UNITY","AFTER_EFFECTS","MOGRT"],"title":"AssetType"},"JobState":{"type":"string","enum":["NOT_STARTED","IN_PROGRESS","COMPLETED","FAILED","INSUFFICIENT_CREDITS"],"title":"JobState","description":"Enum for asset job states"},"PreviewDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"frame":{"type":"integer","title":"Frame"},"signed_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Url"}},"type":"object","required":["id","frame"],"title":"PreviewDTO"},"ProxyDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"}},"type":"object","required":["id"],"title":"ProxyDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## POST /assets/{asset\_id}/custom-thumbnail

> Set Custom Thumbnail

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/{asset_id}/custom-thumbnail":{"post":{"tags":["assets"],"summary":"Set Custom Thumbnail","operationId":"set_custom_thumbnail_assets__asset_id__custom_thumbnail_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The asset id","description":"The id of the asset to retrieve"},"description":"The id of the asset to retrieve"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_set_custom_thumbnail_assets__asset_id__custom_thumbnail_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_set_custom_thumbnail_assets__asset_id__custom_thumbnail_post":{"properties":{"drive_id":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this asset is in"},"attachment_token":{"type":"string","title":"Attachment tokens","description":"JWT tokens for attachments to link to this thumbnail"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_set_custom_thumbnail_assets__asset_id__custom_thumbnail_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## DELETE /assets/{asset\_id}/custom-thumbnail

> Reset Custom Thumbnail

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/assets/{asset_id}/custom-thumbnail":{"delete":{"tags":["assets"],"summary":"Reset Custom Thumbnail","operationId":"reset_custom_thumbnail_assets__asset_id__custom_thumbnail_delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The asset id","description":"The id of the asset to retrieve"},"description":"The id of the asset to retrieve"},{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this attachment is in"},"description":"The id of the drive this attachment is in"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_reset_custom_thumbnail_assets__asset_id__custom_thumbnail_delete"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_reset_custom_thumbnail_assets__asset_id__custom_thumbnail_delete":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_reset_custom_thumbnail_assets__asset_id__custom_thumbnail_delete"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```


# Attachments

## Initiate attachment upload

> Initiate an attachment upload by generating a presigned URL and signed token.\
> \
> This is phase 1 of the two-phase attachment flow:\
> 1\. Call this endpoint to get presigned URL and token\
> 2\. Upload file to the presigned URL\
> 3\. Pass token(s) when creating the entity (e.g., comment) to link attachments

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/attachments/upload":{"post":{"tags":["attachments"],"summary":"Initiate attachment upload","description":"Initiate an attachment upload by generating a presigned URL and signed token.\n\nThis is phase 1 of the two-phase attachment flow:\n1. Call this endpoint to get presigned URL and token\n2. Upload file to the presigned URL\n3. Pass token(s) when creating the entity (e.g., comment) to link attachments","operationId":"initiate_attachment_upload_attachments_upload_post","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_initiate_attachment_upload_attachments_upload_post"}}}},"responses":{"200":{"description":"Presigned URL and token for uploading an attachment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachmentUploadResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_initiate_attachment_upload_attachments_upload_post":{"properties":{"drive_id":{"type":"string","format":"uuid","title":"Drive ID","description":"The ID of the drive to upload the attachment to"},"size":{"type":"integer","title":"File size","description":"The size of the file in bytes"},"mime_type":{"type":"string","title":"MIME type","description":"The MIME type of the file"},"file_name":{"type":"string","title":"File name","description":"The original filename"},"entity":{"$ref":"#/components/schemas/AttachmentEntity","title":"Entity","description":"The entity that will own this attachment (e.g., 'comments')"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["drive_id","size","mime_type","file_name","entity"],"title":"Body_initiate_attachment_upload_attachments_upload_post"},"AttachmentEntity":{"type":"string","enum":["comments","assets"],"title":"AttachmentEntity"},"AttachmentUploadResponse":{"properties":{"presigned_url":{"type":"string","title":"Presigned Url"},"token":{"type":"string","title":"Token"}},"type":"object","required":["presigned_url","token"],"title":"AttachmentUploadResponse","description":"Response from attachment upload initiation."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```


# Previews

## GET /previews/url/{preview\_id}

> Get a preview by its id. Returns as a redirect to the signed url.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/previews/url/{preview_id}":{"get":{"tags":["previews"],"summary":"Get a preview by its id. Returns as a redirect to the signed url.","operationId":"get_preview_url_previews_url__preview_id__get","parameters":[{"name":"preview_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Preview Id"}},{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this asset is in"},"description":"The id of the drive this asset is in"},{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The name of the preview to get","description":"The name of the preview to get"},"description":"The name of the preview to get"},{"name":"authorization","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The authorization token","description":"The authorization token to use to fetch the preview"},"description":"The authorization token to use to fetch the preview"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_preview_url_previews_url__preview_id__get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Get Preview Url Previews Url  Preview Id  Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_preview_url_previews_url__preview_id__get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_preview_url_previews_url__preview_id__get"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```


# Proxies

## GET /proxies/{proxy\_id}

> Get a proxy by id by redirecting to the signed url

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/proxies/{proxy_id}":{"get":{"tags":["proxies"],"summary":"Get a proxy by id by redirecting to the signed url","operationId":"get_proxy_url_proxies__proxy_id__get","parameters":[{"name":"proxy_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Proxy Id"}},{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this asset is in"},"description":"The id of the drive this asset is in"},{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The name of the proxy to get","description":"The name of the proxy to get"},"description":"The name of the proxy to get"},{"name":"authorization","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The authorization token","description":"The authorization token to use to fetch the preview"},"description":"The authorization token to use to fetch the preview"},{"name":"shade-collection-id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Collection ID","description":"The collection id to authorize against, if not provided will use the default collection for the user."},"description":"The collection id to authorize against, if not provided will use the default collection for the user."},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_proxy_url_proxies__proxy_id__get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Get Proxy Url Proxies  Proxy Id  Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_proxy_url_proxies__proxy_id__get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_proxy_url_proxies__proxy_id__get"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```


# Files

## POST /files/directory

> Ensure a directory exists at the given path, creating if needed

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/files/directory":{"post":{"tags":["files"],"summary":"Ensure a directory exists at the given path, creating if needed","operationId":"make_directory_files_directory_post","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_make_directory_files_directory_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_make_directory_files_directory_post":{"properties":{"path":{"type":"string","format":"path","title":"The path to ensure a directory for","description":"The path to ensure a directory exists at"},"drive_id":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive we want to make a directory in"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["path","drive_id"],"title":"Body_make_directory_files_directory_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## POST /files/directory/batch

> Ensure a list of directories exist at the given path, creating if needed

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/files/directory/batch":{"post":{"tags":["files"],"summary":"Ensure a list of directories exist at the given path, creating if needed","operationId":"make_directories_files_directory_batch_post","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_make_directories_files_directory_batch_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_make_directories_files_directory_batch_post":{"properties":{"paths":{"items":{"type":"string","format":"path"},"type":"array","title":"The paths to ensure directories for","description":"The paths to ensure directories exist at"},"drive_id":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive we want to make a directory in"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["paths","drive_id"],"title":"Body_make_directories_files_directory_batch_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Move a file or folder to a new location

> Move a file or folder to a new location

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/files/move":{"post":{"tags":["files"],"summary":"Move a file or folder to a new location","description":"Move a file or folder to a new location","operationId":"move_files_move_post","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_move_files_move_post"}}}},"responses":{"200":{"description":"The new path of the file or folder","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_move_files_move_post":{"properties":{"source":{"type":"string","format":"path","title":"The source path","description":"The path of the file or folder to move"},"destination":{"type":"string","format":"path","title":"The destination path","description":"The path to move the file or folder to"},"drive_id":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive containing the file to move"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["source","destination","drive_id"],"title":"Body_move_files_move_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Move a batch of files or folders to a new location

> NOTE: this route only works when the sources come from the same folder

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/files/move/batch":{"post":{"tags":["files"],"summary":"Move a batch of files or folders to a new location","description":"NOTE: this route only works when the sources come from the same folder","operationId":"move_batch_files_move_batch_post","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_move_batch_files_move_batch_post"}}}},"responses":{"200":{"description":"The new path of the file or folder","content":{"application/json":{"schema":{"type":"array","items":{"type":"string","format":"path"},"title":"Response Move Batch Files Move Batch Post"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_move_batch_files_move_batch_post":{"properties":{"sources":{"items":{"type":"string","format":"path"},"type":"array","title":"The source paths","description":"The paths of the files or folders to move"},"destinations":{"items":{"type":"string","format":"path"},"type":"array","title":"The destination path","description":"The path to move the file or folder to"},"drive_id":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive containing the file to move"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["sources","destinations","drive_id"],"title":"Body_move_batch_files_move_batch_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Copy a file to a new location

> Copy a file or folder to a new location

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/files/copy":{"post":{"tags":["files"],"summary":"Copy a file to a new location","description":"Copy a file or folder to a new location","operationId":"copy_files_copy_post","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_copy_files_copy_post"}}}},"responses":{"200":{"description":"The new path of the file","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_copy_files_copy_post":{"properties":{"source":{"type":"string","format":"path","title":"The source path","description":"The path of the file or folder to copy"},"destination":{"type":"string","format":"path","title":"The destination path","description":"The path to copy the file or folder to"},"drive_id":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive containing the file to copy"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["source","destination","drive_id"],"title":"Body_copy_files_copy_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Move a file or folder to the trash

> Move a file or folder to the trash

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/files/trash":{"post":{"tags":["files"],"summary":"Move a file or folder to the trash","description":"Move a file or folder to the trash","operationId":"trash_files_trash_post","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_trash_files_trash_post"}}}},"responses":{"200":{"description":"The new path of the file or folder","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_trash_files_trash_post":{"properties":{"path":{"type":"string","format":"path","title":"The path to trash","description":"The path of the file or folder to move to the trash"},"drive_id":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive containing the file we want to move to trash"},"share_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"The share id","description":"The id of the shared root folder"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["path","drive_id"],"title":"Body_trash_files_trash_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Move a file or folder to the trash

> Move a file or folder to the trash

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/files/trash/batch":{"post":{"tags":["files"],"summary":"Move a file or folder to the trash","description":"Move a file or folder to the trash","operationId":"trash_batch_route_files_trash_batch_post","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_trash_batch_route_files_trash_batch_post"}}}},"responses":{"200":{"description":"The new path of the file or folder","content":{"application/json":{"schema":{"type":"array","items":{"type":"string","format":"path"},"title":"Response Trash Batch Route Files Trash Batch Post"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_trash_batch_route_files_trash_batch_post":{"properties":{"paths":{"items":{"type":"string","format":"path"},"type":"array","title":"The paths to move to trash","description":"The paths of the files or folders to move to the trash"},"drive_id":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive containing the file we want to move to trash"},"share_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"The share id","description":"The id of the shared root folder"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["paths","drive_id"],"title":"Body_trash_batch_route_files_trash_batch_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Delete a file or folder

> Delete a file or folder

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/files/delete":{"post":{"tags":["files"],"summary":"Delete a file or folder","description":"Delete a file or folder","operationId":"delete_files_delete_post","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_delete_files_delete_post"}}}},"responses":{"200":{"description":"The path that was deleted","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_delete_files_delete_post":{"properties":{"path":{"type":"string","format":"path","title":"The path to delete","description":"The path of the file or folder to delete"},"drive_id":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive containing the file we want to delete"},"share_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"The share id","description":"The id of the shared root folder"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["path","drive_id"],"title":"Body_delete_files_delete_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Delete files or folders in batch

> Delete files or folders in batch

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/files/delete/batch":{"post":{"tags":["files"],"summary":"Delete files or folders in batch","description":"Delete files or folders in batch","operationId":"delete_batch_route_files_delete_batch_post","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_delete_batch_route_files_delete_batch_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"string","format":"path"},"title":"Response Delete Batch Route Files Delete Batch Post"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_delete_batch_route_files_delete_batch_post":{"properties":{"paths":{"items":{"type":"string","format":"path"},"type":"array","title":"The paths to delete","description":"The paths of the files or folders to delete"},"drive_id":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive containing the file we want to delete"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["paths","drive_id"],"title":"Body_delete_batch_route_files_delete_batch_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## GET /files/exists

> Retrieve if a path exists or not on filesystem

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/files/exists":{"get":{"tags":["files"],"summary":"Retrieve if a path exists or not on filesystem","operationId":"exists_files_exists_get","parameters":[{"name":"path","in":"query","required":true,"schema":{"type":"string","title":"The path to check exists for","description":"The path to determine if it exists in the filesystem or not","embed":true,"format":"path"},"description":"The path to determine if it exists in the filesystem or not"},{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive containing to check if the file exists in"},"description":"The id of the drive containing to check if the file exists in"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_exists_files_exists_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"boolean","title":"Response Exists Files Exists Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_exists_files_exists_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_exists_files_exists_get"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## GET /files/storage-provider

> Retrieve the storage provider for the files

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/files/storage-provider":{"get":{"tags":["files"],"summary":"Retrieve the storage provider for the files","operationId":"get_storage_provider_files_storage_provider_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CloudMode"}}}},"404":{"description":"Not found"}}}}},"components":{"schemas":{"CloudMode":{"type":"string","enum":["S3","B2","GCS","FS","LOCAL"],"title":"CloudMode"}}}}
```

## Get the details of assets in a path directory

> Get the total size of assets in a directory

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/files/details":{"get":{"tags":["files"],"summary":"Get the details of assets in a path directory","description":"Get the total size of assets in a directory","operationId":"get_dir_details_files_details_get","parameters":[{"name":"path","in":"query","required":true,"schema":{"type":"string","title":"The path of the directory","description":"The path to retrieve the total size for"},"description":"The path to retrieve the total size for"},{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive this path is in"},"description":"The id of the drive this path is in"},{"name":"exclude_trash","in":"query","required":false,"schema":{"type":"boolean","title":"Exclude the trash folder","description":"Whether or not to include the trash folder in the details, if at the drive root.","default":true},"description":"Whether or not to include the trash folder in the details, if at the drive root."},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_dir_details_files_details_get"}}}},"responses":{"200":{"description":"The details of assets in the specified path directory","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DirDetailsDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_dir_details_files_details_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_dir_details_files_details_get"},"DirDetailsDTO":{"properties":{"dir_size_bytes":{"type":"integer","title":"Dir Size Bytes"},"dir_num_items":{"type":"integer","title":"Dir Num Items"}},"type":"object","required":["dir_size_bytes","dir_num_items"],"title":"DirDetailsDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```


# Folder Templates

## GET /folder-templates

> List folder templates for a workspace

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/folder-templates":{"get":{"tags":["folder-templates"],"summary":"List folder templates for a workspace","operationId":"list_folder_templates_folder_templates_get","parameters":[{"name":"workspace_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The workspace id","description":"The id of the workspace to get folder templates from"},"description":"The id of the workspace to get folder templates from"},{"name":"drive_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"The drive id","description":"Optional drive id to filter templates specific to that drive"},"description":"Optional drive id to filter templates specific to that drive"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_list_folder_templates_folder_templates_get"}}}},"responses":{"200":{"description":"A list of folder templates","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FolderTemplateDTO"},"title":"Response List Folder Templates Folder Templates Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_list_folder_templates_folder_templates_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_list_folder_templates_folder_templates_get"},"FolderTemplateDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"drive_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Drive Id"},"workspace_id":{"type":"string","format":"uuid","title":"Workspace Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"icon":{"type":"string","title":"Icon"},"created":{"type":"string","format":"date-time","title":"Created"},"created_by":{"anyOf":[{"$ref":"#/components/schemas/UserDTOBase"},{"type":"null"}]},"paths":{"items":{"type":"string"},"type":"array","title":"Paths"}},"type":"object","required":["id","workspace_id","name","description","icon","created","created_by","paths"],"title":"FolderTemplateDTO"},"UserDTOBase":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"}},"type":"object","required":["id","name","email","avatar_url","user_type"],"title":"UserDTOBase"},"UserType":{"type":"string","enum":["regular","group"],"title":"UserType"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## POST /folder-templates

> Create a folder template from an existing folder

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/folder-templates":{"post":{"tags":["folder-templates"],"summary":"Create a folder template from an existing folder","operationId":"create_folder_template_folder_templates_post","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_create_folder_template_folder_templates_post"}}}},"responses":{"200":{"description":"The created folder template","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderTemplateDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_create_folder_template_folder_templates_post":{"properties":{"name":{"type":"string","title":"Template name","description":"The name of the folder template"},"description":{"type":"string","title":"Template description","description":"A brief description of how to use this template","default":""},"icon":{"type":"string","title":"Template icon key","description":"Icon key used by the client when displaying this template","default":""},"workspace_id":{"type":"string","format":"uuid","title":"Workspace id","description":"The id of the workspace this template belongs to (always required)"},"drive_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Drive id","description":"Optional drive id if this template is specific to a drive within the workspace"},"root_path":{"type":"string","format":"path","title":"Source folder path","description":"The absolute path of the folder to capture as a template"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["name","workspace_id","root_path"],"title":"Body_create_folder_template_folder_templates_post"},"FolderTemplateDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"drive_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Drive Id"},"workspace_id":{"type":"string","format":"uuid","title":"Workspace Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"icon":{"type":"string","title":"Icon"},"created":{"type":"string","format":"date-time","title":"Created"},"created_by":{"anyOf":[{"$ref":"#/components/schemas/UserDTOBase"},{"type":"null"}]},"paths":{"items":{"type":"string"},"type":"array","title":"Paths"}},"type":"object","required":["id","workspace_id","name","description","icon","created","created_by","paths"],"title":"FolderTemplateDTO"},"UserDTOBase":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"}},"type":"object","required":["id","name","email","avatar_url","user_type"],"title":"UserDTOBase"},"UserType":{"type":"string","enum":["regular","group"],"title":"UserType"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## DELETE /folder-templates/{template\_id}

> Delete a folder template

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/folder-templates/{template_id}":{"delete":{"tags":["folder-templates"],"summary":"Delete a folder template","operationId":"delete_folder_template_folder_templates__template_id__delete","parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template ID","description":"The ID of the folder template to delete"},"description":"The ID of the folder template to delete"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_delete_folder_template_folder_templates__template_id__delete"}}}},"responses":{"200":{"description":"True if the template was deleted successfully","content":{"application/json":{"schema":{"type":"boolean","title":"Response Delete Folder Template Folder Templates  Template Id  Delete"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_delete_folder_template_folder_templates__template_id__delete":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_delete_folder_template_folder_templates__template_id__delete"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## PATCH /folder-templates/{template\_id}

> Update a folder template

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/folder-templates/{template_id}":{"patch":{"tags":["folder-templates"],"summary":"Update a folder template","operationId":"update_folder_template_folder_templates__template_id__patch","parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template ID","description":"The ID of the folder template to update"},"description":"The ID of the folder template to update"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_update_folder_template_folder_templates__template_id__patch"}}}},"responses":{"200":{"description":"The updated folder template","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderTemplateDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_update_folder_template_folder_templates__template_id__patch":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Template name","description":"The new name for the folder template"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Template description","description":"The new description for the folder template"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Template icon key","description":"The new icon key for the folder template"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_update_folder_template_folder_templates__template_id__patch"},"FolderTemplateDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"drive_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Drive Id"},"workspace_id":{"type":"string","format":"uuid","title":"Workspace Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"icon":{"type":"string","title":"Icon"},"created":{"type":"string","format":"date-time","title":"Created"},"created_by":{"anyOf":[{"$ref":"#/components/schemas/UserDTOBase"},{"type":"null"}]},"paths":{"items":{"type":"string"},"type":"array","title":"Paths"}},"type":"object","required":["id","workspace_id","name","description","icon","created","created_by","paths"],"title":"FolderTemplateDTO"},"UserDTOBase":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"}},"type":"object","required":["id","name","email","avatar_url","user_type"],"title":"UserDTOBase"},"UserType":{"type":"string","enum":["regular","group"],"title":"UserType"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```


# Search

## Simple search for file names folders, collections, individuals, and views

> Unified simple search endpoint that searches across assets, folders, collections, individuals, and views.\
> \
> This endpoint provides a lightweight search that:\
> \- Searches assets by name\
> \- Searches folders by directory name\
> \- Searches collections by name\
> \- Searches individuals (face groups) by name\
> \- Searches dynamic views by name\
> \- Returns a unified list ranked by match quality (exact > prefix > contains > similarity)\
> \
> Unlike the main search endpoint, this does not perform AI-powered search or\
> semantic search. It's designed for fast, simple name-based lookups across\
> all searchable entities in the drive.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/search/simple":{"post":{"tags":["search","simple-search"],"summary":"Simple search for file names folders, collections, individuals, and views","description":"Unified simple search endpoint that searches across assets, folders, collections, individuals, and views.\n\nThis endpoint provides a lightweight search that:\n- Searches assets by name\n- Searches folders by directory name\n- Searches collections by name\n- Searches individuals (face groups) by name\n- Searches dynamic views by name\n- Returns a unified list ranked by match quality (exact > prefix > contains > similarity)\n\nUnlike the main search endpoint, this does not perform AI-powered search or\nsemantic search. It's designed for fast, simple name-based lookups across\nall searchable entities in the drive.","operationId":"simple_search_handler_search_simple_post","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_simple_search_handler_search_simple_post"}}}},"responses":{"200":{"description":"Unified search results ranked by relevance","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SimpleSearchResultDTO"},"title":"Response Simple Search Handler Search Simple Post"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_simple_search_handler_search_simple_post":{"properties":{"query":{"type":"string","title":"Search query","description":"The query to search for across all entity types."},"drive_id":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive to search in."},"limit":{"type":"integer","title":"Limit","description":"The maximum total number of results to return across all entity types. Defaults to 50.","default":50},"offset":{"type":"integer","title":"Offset","description":"The offset for pagination. Defaults to 0.","default":0},"entity_types":{"anyOf":[{"items":{"$ref":"#/components/schemas/SearchEntity"},"type":"array"},{"type":"null"}],"title":"Entity types","description":"Optional list of entity types to search. If not provided, searches all types."},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["query","drive_id"],"title":"Body_simple_search_handler_search_simple_post"},"SearchEntity":{"type":"string","enum":["asset","folder","collection","individual","view"],"title":"SearchEntity","description":"Entity types that can be searched in simple search."},"SimpleSearchResultDTO":{"properties":{"entity_type":{"$ref":"#/components/schemas/SearchEntity","description":"Type of entity: asset, collection, individual, view, or folder"},"entity_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Entity Id","description":"ID of the entity (null for folders)"},"name":{"type":"string","title":"Name","description":"Display name of the entity"},"path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path","description":"Path of the entity (for assets and folders)"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Optional metadata for UI (e.g., drive_id, icon_type, icon)."}},"type":"object","required":["entity_type","entity_id","name"],"title":"SimpleSearchResultDTO","description":"Unified search result DTO for simple search across all entity types"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Track a search result selection for personalized ranking

> Track when a user selects a search result to improve future search rankings.\
> \
> This endpoint records which search results users click on, allowing the system\
> to boost frequently selected results to the top of future searches for the same query.\
> \
> Requires authentication.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/search/simple/ranking":{"post":{"tags":["search","simple-search"],"summary":"Track a search result selection for personalized ranking","description":"Track when a user selects a search result to improve future search rankings.\n\nThis endpoint records which search results users click on, allowing the system\nto boost frequently selected results to the top of future searches for the same query.\n\nRequires authentication.","operationId":"track_search_selection_search_simple_ranking_post","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_track_search_selection_search_simple_ranking_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_track_search_selection_search_simple_ranking_post":{"properties":{"query":{"type":"string","title":"Query","description":"The search query that was performed"},"entity_type":{"$ref":"#/components/schemas/SearchEntity","description":"Type of entity selected"},"entity_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Entity Id","description":"ID of the selected entity (null for folders)"},"path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path","description":"Path of the selected entity (for folders)"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id","description":"Drive where the search occurred"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["query","entity_type","drive_id"],"title":"Body_track_search_selection_search_simple_ranking_post"},"SearchEntity":{"type":"string","enum":["asset","folder","collection","individual","view"],"title":"SearchEntity","description":"Entity types that can be searched in simple search."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Reset personalized search rankings

> Reset personalized search ranking data for a user.\
> \
> If a query is provided, only rankings for that specific query are reset.\
> Otherwise, all search rankings for the user in the specified drive are reset.\
> \
> Requires authentication.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/search/simple/ranking/reset":{"post":{"tags":["search","simple-search"],"summary":"Reset personalized search rankings","description":"Reset personalized search ranking data for a user.\n\nIf a query is provided, only rankings for that specific query are reset.\nOtherwise, all search rankings for the user in the specified drive are reset.\n\nRequires authentication.","operationId":"reset_search_ranking_search_simple_ranking_reset_post","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_reset_search_ranking_search_simple_ranking_reset_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_reset_search_ranking_search_simple_ranking_reset_post":{"properties":{"drive_id":{"type":"string","format":"uuid","title":"Drive Id","description":"Drive to reset rankings for"},"query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query","description":"Optional specific query to reset. If not provided, resets all queries."},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["drive_id"],"title":"Body_reset_search_ranking_search_simple_ranking_reset_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get recent unique search queries for the current user

> Get the most recent unique search queries for the current user.\
> \
> Returns queries ordered by the most recent selection time across any result\
> for that query. Useful for showing search history or suggested searches.\
> \
> Requires authentication.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/search/simple/queries/recent":{"get":{"tags":["search","simple-search"],"summary":"Get recent unique search queries for the current user","description":"Get the most recent unique search queries for the current user.\n\nReturns queries ordered by the most recent selection time across any result\nfor that query. Useful for showing search history or suggested searches.\n\nRequires authentication.","operationId":"get_recent_search_queries_search_simple_queries_recent_get","parameters":[{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive to get recent queries for"},"description":"The id of the drive to get recent queries for"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","title":"Limit","description":"Maximum number of recent queries to return. Defaults to 10.","default":10},"description":"Maximum number of recent queries to return. Defaults to 10."},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_recent_search_queries_search_simple_queries_recent_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_recent_search_queries_search_simple_queries_recent_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_recent_search_queries_search_simple_queries_recent_get"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Search for assets. Note: This request is idempotent

> Search for assets in the database. This is the primary search function on assets.\
> \
> If collection\_id is provided, the search is restricted to that collection.\
> Otherwise, the search is performed on the entire drive.\
> \
> This route should not be called for searching on a public path - use /search/files instead.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/search":{"post":{"tags":["search"],"summary":"Search for assets. Note: This request is idempotent","description":"Search for assets in the database. This is the primary search function on assets.\n\nIf collection_id is provided, the search is restricted to that collection.\nOtherwise, the search is performed on the entire drive.\n\nThis route should not be called for searching on a public path - use /search/files instead.","operationId":"search_search_post","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_search_search_post"}}}},"responses":{"200":{"description":"A list of matching assets","content":{"application/json":{"schema":{"type":"array","items":{"anyOf":[{"$ref":"#/components/schemas/AssetDTO"},{"type":"object","additionalProperties":true}]},"title":"Response Search Search Post"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_search_search_post":{"properties":{"query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search query","description":"The query to search for. If not provided, all assets will be returned."},"filters":{"anyOf":[{"items":{"$ref":"#/components/schemas/AddedFilterForSearch"},"type":"array"},{"type":"null"}],"title":"Filters","description":"The filters that you want to apply to your search."},"similar_asset_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Similar asset id","description":"The id of the asset to find similar assets to."},"sort":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort order","description":"A field name, optionally prefixed by the - sign to specify a descending order."},"offset":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Offset","description":"The offset of results to return. Input either this or 'page'. Defaults to 0 if neither are inputted."},"page":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Page","description":"The page of results to return. Input either this or offset. Defaults to 0 if neither are inputted."},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit","description":"The maximum number of assets to return. Defaults to 100.","default":100},"drive_id":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive we want to search on."},"return_only_attrs":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Return only these attributes","description":"The attributes that you want to return. If not provided, all attributes will be returned. This is limited, and not all attributes that exist on AssetDTO will work.","default":[]},"collection_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"The collection id","description":"The id of the collection to search within."},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["drive_id"],"title":"Body_search_search_post"},"AddedFilterForSearch":{"properties":{"id":{"title":"Id"},"options":{"items":{"type":"string"},"type":"array","title":"Options"},"clause":{"$ref":"#/components/schemas/FilterClauseVal"}},"type":"object","required":["id","options","clause"],"title":"AddedFilterForSearch"},"FilterClauseVal":{"type":"string","enum":["is","is any of","is not","is true","is false","is not true","is not false","has","doesn't have","before","after","between","is directly in","is under","is not in","<","< any of","<=","<= any of",">","> any of",">=",">= any of","hasn't started","in progress of","completed","failed","includes","does not include","contains","does not contain","does not start with","starts with","end with","is empty","is not empty"],"title":"FilterClauseVal","description":"Filter Clause Values Enum. Contains all filter clause values"},"AssetDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"path":{"type":"string","title":"Path"},"name":{"type":"string","title":"Name"},"extension":{"type":"string","title":"Extension"},"updated":{"type":"string","format":"date-time","title":"Updated"},"created":{"type":"string","format":"date-time","title":"Created"},"type":{"$ref":"#/components/schemas/AssetType"},"size_bytes":{"type":"integer","title":"Size Bytes"},"stack_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Stack Id"},"stack_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stack Number"},"is_fs_draft_blob":{"type":"boolean","title":"Is Fs Draft Blob"},"is_fs_null_blob":{"type":"boolean","title":"Is Fs Null Blob"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"ai_indexed":{"type":"boolean","title":"Ai Indexed"},"system_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"System Metadata","default":{}},"custom_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Custom Metadata","default":{}},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"palette":{"items":{"items":{"type":"integer"},"type":"array"},"type":"array","title":"Palette"},"ocr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ocr"},"transcription_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Transcription Id"},"faces_present":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Faces Present"},"content_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Content Length"},"preview_job_state":{"$ref":"#/components/schemas/JobState"},"metadata_job_state":{"$ref":"#/components/schemas/JobState"},"core_vision_job_state":{"$ref":"#/components/schemas/JobState"},"color_palette_job_state":{"$ref":"#/components/schemas/JobState"},"core_audio_job_state":{"$ref":"#/components/schemas/JobState"},"audio_job_state":{"$ref":"#/components/schemas/JobState"},"facial_recognition_job_state":{"$ref":"#/components/schemas/JobState"},"proxy_job_state":{"$ref":"#/components/schemas/JobState"},"audio_proxy_job_state":{"$ref":"#/components/schemas/JobState"},"transcription_job_state":{"$ref":"#/components/schemas/JobState"},"objects":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Objects"},"texture_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Texture Data"},"integration_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Integration Data"},"preview_images":{"items":{"$ref":"#/components/schemas/PreviewDTO"},"type":"array","title":"Preview Images"},"custom_thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}]},"proxy":{"anyOf":[{"$ref":"#/components/schemas/ProxyDTO"},{"type":"null"}]},"audio_proxy":{"anyOf":[{"$ref":"#/components/schemas/ProxyDTO"},{"type":"null"}]}},"type":"object","required":["id","drive_id","path","name","extension","updated","created","type","size_bytes","is_fs_draft_blob","is_fs_null_blob","ai_indexed","palette","preview_job_state","metadata_job_state","core_vision_job_state","color_palette_job_state","core_audio_job_state","facial_recognition_job_state","proxy_job_state","audio_proxy_job_state","transcription_job_state","preview_images"],"title":"AssetDTO","description":"Full asset DTO with relationship fields that require eager loading."},"AssetType":{"type":"string","enum":["IMAGE","VIDEO","AUDIO","DOCUMENT","HDR","HDRI","PHOTOSHOP","ILLUSTRATOR","EXR","OBJECT","VECTOR","OTHER","MAYA","MAX","BLENDER","HOUDINI","UNREAL","UNITY","AFTER_EFFECTS","MOGRT"],"title":"AssetType"},"JobState":{"type":"string","enum":["NOT_STARTED","IN_PROGRESS","COMPLETED","FAILED","INSUFFICIENT_CREDITS"],"title":"JobState","description":"Enum for asset job states"},"PreviewDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"frame":{"type":"integer","title":"Frame"},"signed_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Url"}},"type":"object","required":["id","frame"],"title":"PreviewDTO"},"ProxyDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"}},"type":"object","required":["id"],"title":"ProxyDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Chunk enabled version of search above

> Search for subclips using columnar search engine. Returns assets with their associated chunks.\
> \
> If collection\_id is provided, the search is restricted to that collection.\
> Otherwise, the search is performed on the entire drive.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/search/chunked":{"post":{"tags":["search"],"summary":"Chunk enabled version of search above","description":"Search for subclips using columnar search engine. Returns assets with their associated chunks.\n\nIf collection_id is provided, the search is restricted to that collection.\nOtherwise, the search is performed on the entire drive.","operationId":"search_subclip_search_chunked_post","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_search_subclip_search_chunked_post"}}}},"responses":{"200":{"description":"A list of matching assets with chunks","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AssetWithChunkDTO"},"title":"Response Search Subclip Search Chunked Post"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_search_subclip_search_chunked_post":{"properties":{"query":{"type":"string","title":"Search query","description":"The query to search for subclips."},"filters":{"anyOf":[{"items":{"$ref":"#/components/schemas/AddedFilterForSearch"},"type":"array"},{"type":"null"}],"title":"Filters","description":"The filters that you want to apply to your search."},"drive_id":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive we want to search on."},"database_signals":{"items":{"type":"string"},"type":"array","title":"Database signals","description":"The database column signals to search through.","default":[]},"signal_weights":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Signal weights","description":"Weights for each database signal (e.g., {'video_chunks': 1.0, 'document_chunks': 0.8}). Default is 1.0 for all."},"search_modes":{"anyOf":[{"additionalProperties":{"additionalProperties":{"type":"boolean"},"type":"object"},"type":"object"},{"type":"null"}],"title":"Search modes","description":"Search modes per signal. Each signal can have 'vector' and 'fulltext' modes enabled/disabled. E.g., {'video_chunks': {'vector': True, 'fulltext': False}, 'document_chunks': {'vector': True, 'fulltext': True}}. Default enables both modes where available."},"merge_chunks":{"type":"boolean","title":"Merge chunks","description":"Whether to merge overlapping/adjacent chunks within the same asset. Disable to see individual chunk segments.","default":true},"video_score_threshold":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Video score threshold","description":"Minimum score threshold for video/audio chunks. Chunks below this score are filtered out. Suggested: 0.03"},"document_score_threshold":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Document score threshold","description":"Minimum score threshold for document/transcription chunks. Chunks below this score are filtered out. Suggested: 0.35"},"image_score_threshold":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Image score threshold","description":"Minimum score threshold for image chunks. Chunks below this score are filtered out. Suggested: 0.02"},"collection_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"The collection id","description":"The id of the collection to search within."},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["query","drive_id"],"title":"Body_search_subclip_search_chunked_post"},"AddedFilterForSearch":{"properties":{"id":{"title":"Id"},"options":{"items":{"type":"string"},"type":"array","title":"Options"},"clause":{"$ref":"#/components/schemas/FilterClauseVal"}},"type":"object","required":["id","options","clause"],"title":"AddedFilterForSearch"},"FilterClauseVal":{"type":"string","enum":["is","is any of","is not","is true","is false","is not true","is not false","has","doesn't have","before","after","between","is directly in","is under","is not in","<","< any of","<=","<= any of",">","> any of",">=",">= any of","hasn't started","in progress of","completed","failed","includes","does not include","contains","does not contain","does not start with","starts with","end with","is empty","is not empty"],"title":"FilterClauseVal","description":"Filter Clause Values Enum. Contains all filter clause values"},"AssetWithChunkDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"path":{"type":"string","title":"Path"},"name":{"type":"string","title":"Name"},"extension":{"type":"string","title":"Extension"},"updated":{"type":"string","format":"date-time","title":"Updated"},"created":{"type":"string","format":"date-time","title":"Created"},"type":{"$ref":"#/components/schemas/AssetType"},"size_bytes":{"type":"integer","title":"Size Bytes"},"stack_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Stack Id"},"stack_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stack Number"},"is_fs_draft_blob":{"type":"boolean","title":"Is Fs Draft Blob"},"is_fs_null_blob":{"type":"boolean","title":"Is Fs Null Blob"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"ai_indexed":{"type":"boolean","title":"Ai Indexed"},"system_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"System Metadata","default":{}},"custom_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Custom Metadata","default":{}},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"palette":{"items":{"items":{"type":"integer"},"type":"array"},"type":"array","title":"Palette"},"ocr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ocr"},"transcription_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Transcription Id"},"faces_present":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Faces Present"},"content_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Content Length"},"preview_job_state":{"$ref":"#/components/schemas/JobState"},"metadata_job_state":{"$ref":"#/components/schemas/JobState"},"core_vision_job_state":{"$ref":"#/components/schemas/JobState"},"color_palette_job_state":{"$ref":"#/components/schemas/JobState"},"core_audio_job_state":{"$ref":"#/components/schemas/JobState"},"audio_job_state":{"$ref":"#/components/schemas/JobState"},"facial_recognition_job_state":{"$ref":"#/components/schemas/JobState"},"proxy_job_state":{"$ref":"#/components/schemas/JobState"},"audio_proxy_job_state":{"$ref":"#/components/schemas/JobState"},"transcription_job_state":{"$ref":"#/components/schemas/JobState"},"objects":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Objects"},"texture_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Texture Data"},"integration_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Integration Data"},"preview_images":{"items":{"$ref":"#/components/schemas/PreviewDTO"},"type":"array","title":"Preview Images"},"custom_thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}]},"proxy":{"anyOf":[{"$ref":"#/components/schemas/ProxyDTO"},{"type":"null"}]},"audio_proxy":{"anyOf":[{"$ref":"#/components/schemas/ProxyDTO"},{"type":"null"}]},"relevant_chunks":{"items":{},"type":"array","title":"Relevant Chunks","default":[]}},"type":"object","required":["id","drive_id","path","name","extension","updated","created","type","size_bytes","is_fs_draft_blob","is_fs_null_blob","ai_indexed","palette","preview_job_state","metadata_job_state","core_vision_job_state","color_palette_job_state","core_audio_job_state","facial_recognition_job_state","proxy_job_state","audio_proxy_job_state","transcription_job_state","preview_images"],"title":"AssetWithChunkDTO","description":"Asset DTO for chunk search results - includes preview images and proxy URLs."},"AssetType":{"type":"string","enum":["IMAGE","VIDEO","AUDIO","DOCUMENT","HDR","HDRI","PHOTOSHOP","ILLUSTRATOR","EXR","OBJECT","VECTOR","OTHER","MAYA","MAX","BLENDER","HOUDINI","UNREAL","UNITY","AFTER_EFFECTS","MOGRT"],"title":"AssetType"},"JobState":{"type":"string","enum":["NOT_STARTED","IN_PROGRESS","COMPLETED","FAILED","INSUFFICIENT_CREDITS"],"title":"JobState","description":"Enum for asset job states"},"PreviewDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"frame":{"type":"integer","title":"Frame"},"signed_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Url"}},"type":"object","required":["id","frame"],"title":"PreviewDTO"},"ProxyDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"}},"type":"object","required":["id"],"title":"ProxyDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get the folders in a folder

> Get all content in a folder (non-indexed and indexed)

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/search/folders":{"get":{"tags":["search"],"summary":"Get the folders in a folder","description":"Get all content in a folder (non-indexed and indexed)","operationId":"get_folders_in_a_folder_search_folders_get","parameters":[{"name":"path","in":"query","required":true,"schema":{"type":"string","title":"The directory path","description":"The directory path to list items","format":"path"},"description":"The directory path to list items"},{"name":"query","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search query","description":"The query to search for. If not provided, all folder contents will be returned."},"description":"The query to search for. If not provided, all folder contents will be returned."},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Offset","description":"The offset of results to return. Input either this or 'page'."},"description":"The offset of results to return. Input either this or 'page'."},{"name":"page","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Page number","description":"The page to query. Input either this or 'offset'."},"description":"The page to query. Input either this or 'offset'."},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit per page","description":"The limit that is fetched per page"},"description":"The limit that is fetched per page"},{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive we want to add user to"},"description":"The id of the drive we want to add user to"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_folders_in_a_folder_search_folders_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"string","format":"path"},"title":"Response Get Folders In A Folder Search Folders Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_folders_in_a_folder_search_folders_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_folders_in_a_folder_search_folders_get"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get the files in a folder

> Get all files in a folder. This performs a "search" with a filter on the path, and auths on public paths.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/search/files":{"post":{"tags":["search"],"summary":"Get the files in a folder","description":"Get all files in a folder. This performs a \"search\" with a filter on the path, and auths on public paths.","operationId":"get_files_in_a_folder_search_files_post","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_files_in_a_folder_search_files_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"anyOf":[{"$ref":"#/components/schemas/AssetDTO"},{"type":"object","additionalProperties":true}]},"title":"Response Get Files In A Folder Search Files Post"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_files_in_a_folder_search_files_post":{"properties":{"path":{"type":"string","format":"path","title":"The directory path","description":"The directory path to list items"},"recursive":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Recursive search","description":"Whether or not to do a recursive search on the directory","default":false},"query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search query","description":"The query to search for. If not provided, all folder contents will be returned."},"offset":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Offset","description":"The offset of results to return. Input either this or 'page'. Defaults to 0 if neither are inputted."},"page":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Page number","description":"The page to query. Input either this or 'offset'. Defaults to 0 if neither are inputted."},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit per page","description":"The limit that is fetched per page. Defaults to 100","default":100},"filters":{"anyOf":[{"items":{"$ref":"#/components/schemas/AddedFilterForSearch"},"type":"array"},{"type":"null"}],"title":"Filters","description":"The filters that you want to apply to your search."},"sort":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort order","description":"A field name, optionally prefixed by the - sign to specify a descending order."},"drive_id":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive we want to add user to"},"return_only_attrs":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Return only these attributes","description":"The attributes that you want to return. If not provided, all attributes will be returned. This is limited, and not all attributes that exist on AssetDTO will work.","default":[]},"collection_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"The collection id","description":"The id of the collection (used for custom sort when browsing folders within a collection)."},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["path","drive_id"],"title":"Body_get_files_in_a_folder_search_files_post"},"AddedFilterForSearch":{"properties":{"id":{"title":"Id"},"options":{"items":{"type":"string"},"type":"array","title":"Options"},"clause":{"$ref":"#/components/schemas/FilterClauseVal"}},"type":"object","required":["id","options","clause"],"title":"AddedFilterForSearch"},"FilterClauseVal":{"type":"string","enum":["is","is any of","is not","is true","is false","is not true","is not false","has","doesn't have","before","after","between","is directly in","is under","is not in","<","< any of","<=","<= any of",">","> any of",">=",">= any of","hasn't started","in progress of","completed","failed","includes","does not include","contains","does not contain","does not start with","starts with","end with","is empty","is not empty"],"title":"FilterClauseVal","description":"Filter Clause Values Enum. Contains all filter clause values"},"AssetDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"path":{"type":"string","title":"Path"},"name":{"type":"string","title":"Name"},"extension":{"type":"string","title":"Extension"},"updated":{"type":"string","format":"date-time","title":"Updated"},"created":{"type":"string","format":"date-time","title":"Created"},"type":{"$ref":"#/components/schemas/AssetType"},"size_bytes":{"type":"integer","title":"Size Bytes"},"stack_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Stack Id"},"stack_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stack Number"},"is_fs_draft_blob":{"type":"boolean","title":"Is Fs Draft Blob"},"is_fs_null_blob":{"type":"boolean","title":"Is Fs Null Blob"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"ai_indexed":{"type":"boolean","title":"Ai Indexed"},"system_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"System Metadata","default":{}},"custom_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Custom Metadata","default":{}},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"palette":{"items":{"items":{"type":"integer"},"type":"array"},"type":"array","title":"Palette"},"ocr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ocr"},"transcription_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Transcription Id"},"faces_present":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Faces Present"},"content_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Content Length"},"preview_job_state":{"$ref":"#/components/schemas/JobState"},"metadata_job_state":{"$ref":"#/components/schemas/JobState"},"core_vision_job_state":{"$ref":"#/components/schemas/JobState"},"color_palette_job_state":{"$ref":"#/components/schemas/JobState"},"core_audio_job_state":{"$ref":"#/components/schemas/JobState"},"audio_job_state":{"$ref":"#/components/schemas/JobState"},"facial_recognition_job_state":{"$ref":"#/components/schemas/JobState"},"proxy_job_state":{"$ref":"#/components/schemas/JobState"},"audio_proxy_job_state":{"$ref":"#/components/schemas/JobState"},"transcription_job_state":{"$ref":"#/components/schemas/JobState"},"objects":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Objects"},"texture_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Texture Data"},"integration_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Integration Data"},"preview_images":{"items":{"$ref":"#/components/schemas/PreviewDTO"},"type":"array","title":"Preview Images"},"custom_thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}]},"proxy":{"anyOf":[{"$ref":"#/components/schemas/ProxyDTO"},{"type":"null"}]},"audio_proxy":{"anyOf":[{"$ref":"#/components/schemas/ProxyDTO"},{"type":"null"}]}},"type":"object","required":["id","drive_id","path","name","extension","updated","created","type","size_bytes","is_fs_draft_blob","is_fs_null_blob","ai_indexed","palette","preview_job_state","metadata_job_state","core_vision_job_state","color_palette_job_state","core_audio_job_state","facial_recognition_job_state","proxy_job_state","audio_proxy_job_state","transcription_job_state","preview_images"],"title":"AssetDTO","description":"Full asset DTO with relationship fields that require eager loading."},"AssetType":{"type":"string","enum":["IMAGE","VIDEO","AUDIO","DOCUMENT","HDR","HDRI","PHOTOSHOP","ILLUSTRATOR","EXR","OBJECT","VECTOR","OTHER","MAYA","MAX","BLENDER","HOUDINI","UNREAL","UNITY","AFTER_EFFECTS","MOGRT"],"title":"AssetType"},"JobState":{"type":"string","enum":["NOT_STARTED","IN_PROGRESS","COMPLETED","FAILED","INSUFFICIENT_CREDITS"],"title":"JobState","description":"Enum for asset job states"},"PreviewDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"frame":{"type":"integer","title":"Frame"},"signed_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Url"}},"type":"object","required":["id","frame"],"title":"PreviewDTO"},"ProxyDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"}},"type":"object","required":["id"],"title":"ProxyDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Export search results

> Export search results to a file. The file is returned as a downloadable response.\
> \
> If collection\_id is provided, the search is restricted to that collection.\
> If path is provided, the search is restricted to that path (includes public path).\
> Otherwise, the search is performed on the entire drive.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/search/exports/{export_format}":{"post":{"tags":["search"],"summary":"Export search results","description":"Export search results to a file. The file is returned as a downloadable response.\n\nIf collection_id is provided, the search is restricted to that collection.\nIf path is provided, the search is restricted to that path (includes public path).\nOtherwise, the search is performed on the entire drive.","operationId":"export_search_route_search_exports__export_format__post","parameters":[{"name":"export_format","in":"path","required":true,"schema":{"$ref":"#/components/schemas/ExportFormat","title":"The format","description":"The format that you want to export the search results in."},"description":"The format that you want to export the search results in."},{"name":"timezone","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The timezone to be exported to (ex: 'America/New_York')"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_export_search_route_search_exports__export_format__post"}}}},"responses":{"200":{"description":"A downloadable file","content":{"application/json":{"schema":{"title":"Response Export Search Route Search Exports  Export Format  Post"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"ExportFormat":{"type":"string","enum":["csv","tsv","txt","ale","premiere","davinci","avid"],"title":"ExportFormat"},"Body_export_search_route_search_exports__export_format__post":{"properties":{"query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search query","description":"The query to search for."},"filters":{"anyOf":[{"items":{"$ref":"#/components/schemas/AddedFilterForSearch"},"type":"array"},{"type":"null"}],"title":"Filters","description":"The filters that you want to apply to your search."},"sort":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort order","description":"A field name, optionally prefixed by the - sign to specify a descending order."},"offset":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Offset","description":"The offset of results to return. Input either this or 'page'. Defaults to 0 if neither are inputted."},"page":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Page number","description":"The page to query. Input either this or 'offset'. Defaults to 0 if neither are inputted."},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit per page","description":"The limit that is fetched per page. Defaults to 100","default":100},"drive_id":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive we want to search on."},"collection_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"The collection id","description":"The id of the collection to search within."},"path":{"anyOf":[{"type":"string","format":"path"},{"type":"null"}],"title":"The directory path","description":"The directory path to list items under"},"recursive":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Recursive search","description":"Whether or not to do a recursive search on the directory","default":false},"share_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"The share id","description":"The id of the share to search within"},"metadata_attribute_ids":{"items":{"type":"string"},"type":"array","title":"Attributes","description":"List of attribute IDs that should be returned (these are the columns in the export)"},"os":{"anyOf":[{"$ref":"#/components/schemas/OperatingSystem"},{"type":"null"}],"title":"The operating system","description":"The operating system that the exported file will be used on."},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["drive_id","metadata_attribute_ids"],"title":"Body_export_search_route_search_exports__export_format__post"},"AddedFilterForSearch":{"properties":{"id":{"title":"Id"},"options":{"items":{"type":"string"},"type":"array","title":"Options"},"clause":{"$ref":"#/components/schemas/FilterClauseVal"}},"type":"object","required":["id","options","clause"],"title":"AddedFilterForSearch"},"FilterClauseVal":{"type":"string","enum":["is","is any of","is not","is true","is false","is not true","is not false","has","doesn't have","before","after","between","is directly in","is under","is not in","<","< any of","<=","<= any of",">","> any of",">=",">= any of","hasn't started","in progress of","completed","failed","includes","does not include","contains","does not contain","does not start with","starts with","end with","is empty","is not empty"],"title":"FilterClauseVal","description":"Filter Clause Values Enum. Contains all filter clause values"},"OperatingSystem":{"type":"string","enum":["Windows","Linux","Debian","Fedora","Darwin"],"title":"OperatingSystem","description":"Operating System Enum from the result of platform.system()"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```


# Individuals

## List all individuals

> Get a list of all significant individuals. Note: an individual is only sig and returned if it contains >=1 faces.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/individuals":{"get":{"tags":["individuals"],"summary":"List all individuals","description":"Get a list of all significant individuals. Note: an individual is only sig and returned if it contains >=1 faces.","operationId":"read_individuals_individuals_get","parameters":[{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive to get individuals for"},"description":"The id of the drive to get individuals for"},{"name":"page","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Page number","description":"The page to query","default":0},"description":"The page to query"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit per page","description":"The limit that is fetched per page","default":100},"description":"The limit that is fetched per page"},{"name":"labeled","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Labeled individuals","description":"If set, only labeled individuals will be returned"},"description":"If set, only labeled individuals will be returned"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_read_individuals_individuals_get"}}}},"responses":{"200":{"description":"A list of all individuals","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/IndividualDTO"},"title":"Response Read Individuals Individuals Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_read_individuals_individuals_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_read_individuals_individuals_get"},"IndividualDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"labeled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Labeled"},"preview_face":{"anyOf":[{"$ref":"#/components/schemas/FaceDTO"},{"type":"null"}]},"preview_image":{"anyOf":[{"$ref":"#/components/schemas/PreviewDTO"},{"type":"null"}]}},"type":"object","required":["id","name"],"title":"IndividualDTO"},"FaceDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"bbox":{"additionalProperties":{"type":"integer"},"type":"object","title":"Bbox"},"face_preview":{"$ref":"#/components/schemas/PreviewDTO"},"individual_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Individual Id"}},"type":"object","required":["id","bbox","face_preview"],"title":"FaceDTO"},"PreviewDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"frame":{"type":"integer","title":"Frame"},"signed_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Url"}},"type":"object","required":["id","frame"],"title":"PreviewDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get an individual

> Get an individual by id

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/individuals/{individual_id}":{"get":{"tags":["individuals"],"summary":"Get an individual","description":"Get an individual by id","operationId":"read_individual_individuals__individual_id__get","parameters":[{"name":"individual_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The individual id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_read_individual_individuals__individual_id__get"}}}},"responses":{"200":{"description":"The individual","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndividualDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_read_individual_individuals__individual_id__get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_read_individual_individuals__individual_id__get"},"IndividualDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"labeled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Labeled"},"preview_face":{"anyOf":[{"$ref":"#/components/schemas/FaceDTO"},{"type":"null"}]},"preview_image":{"anyOf":[{"$ref":"#/components/schemas/PreviewDTO"},{"type":"null"}]}},"type":"object","required":["id","name"],"title":"IndividualDTO"},"FaceDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"bbox":{"additionalProperties":{"type":"integer"},"type":"object","title":"Bbox"},"face_preview":{"$ref":"#/components/schemas/PreviewDTO"},"individual_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Individual Id"}},"type":"object","required":["id","bbox","face_preview"],"title":"FaceDTO"},"PreviewDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"frame":{"type":"integer","title":"Frame"},"signed_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Url"}},"type":"object","required":["id","frame"],"title":"PreviewDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Update an individual

> Update an individual with a new name/label.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/individuals/{individual_id}":{"put":{"tags":["individuals"],"summary":"Update an individual","description":"Update an individual with a new name/label.","operationId":"update_individual_individuals__individual_id__put","parameters":[{"name":"individual_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The individual id","description":"The id of the individual to be updated"},"description":"The id of the individual to be updated"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_update_individual_individuals__individual_id__put"}}}},"responses":{"200":{"description":"The updated individual","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndividualDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_update_individual_individuals__individual_id__put":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Individual label","description":"The new name/label for the individual"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_update_individual_individuals__individual_id__put"},"IndividualDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"labeled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Labeled"},"preview_face":{"anyOf":[{"$ref":"#/components/schemas/FaceDTO"},{"type":"null"}]},"preview_image":{"anyOf":[{"$ref":"#/components/schemas/PreviewDTO"},{"type":"null"}]}},"type":"object","required":["id","name"],"title":"IndividualDTO"},"FaceDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"bbox":{"additionalProperties":{"type":"integer"},"type":"object","title":"Bbox"},"face_preview":{"$ref":"#/components/schemas/PreviewDTO"},"individual_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Individual Id"}},"type":"object","required":["id","bbox","face_preview"],"title":"FaceDTO"},"PreviewDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"frame":{"type":"integer","title":"Frame"},"signed_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Url"}},"type":"object","required":["id","frame"],"title":"PreviewDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Hides the given individuals by id

> Hide individuals by their ids.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/individuals/{drive_id}/individual/disable":{"put":{"tags":["individuals"],"summary":"Hides the given individuals by id","description":"Hide individuals by their ids.","operationId":"hide_individuals_individuals__drive_id__individual_disable_put","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive to hide individuals in"},"description":"The id of the drive to hide individuals in"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_hide_individuals_individuals__drive_id__individual_disable_put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_hide_individuals_individuals__drive_id__individual_disable_put":{"properties":{"individual_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Individual IDs","description":"The ids of the individuals to hide"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["individual_ids"],"title":"Body_hide_individuals_individuals__drive_id__individual_disable_put"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Create an individual from faces

> Create an individual from a set of faces defined by the user.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/individuals/{drive_id}/individual/create":{"post":{"tags":["individuals"],"summary":"Create an individual from faces","description":"Create an individual from a set of faces defined by the user.","operationId":"create_individual_from_faces_user_individuals__drive_id__individual_create_post","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive to create the individual in"},"description":"The id of the drive to create the individual in"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_create_individual_from_faces_user_individuals__drive_id__individual_create_post"}}}},"responses":{"200":{"description":"The new individual","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndividualDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_create_individual_from_faces_user_individuals__drive_id__individual_create_post":{"properties":{"face_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Face IDs","description":"The ids of the faces to create the individual from"},"individual_name":{"type":"string","title":"Individual name","description":"The name/label for the individual"},"old_individual_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Old Individual ID","description":"If provided, the individual that the faces are being taken from (must be a labeled individual)"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["face_ids","individual_name"],"title":"Body_create_individual_from_faces_user_individuals__drive_id__individual_create_post"},"IndividualDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"labeled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Labeled"},"preview_face":{"anyOf":[{"$ref":"#/components/schemas/FaceDTO"},{"type":"null"}]},"preview_image":{"anyOf":[{"$ref":"#/components/schemas/PreviewDTO"},{"type":"null"}]}},"type":"object","required":["id","name"],"title":"IndividualDTO"},"FaceDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"bbox":{"additionalProperties":{"type":"integer"},"type":"object","title":"Bbox"},"face_preview":{"$ref":"#/components/schemas/PreviewDTO"},"individual_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Individual Id"}},"type":"object","required":["id","bbox","face_preview"],"title":"FaceDTO"},"PreviewDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"frame":{"type":"integer","title":"Frame"},"signed_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Url"}},"type":"object","required":["id","frame"],"title":"PreviewDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Assign a face to another individual

> Assign face(s) to an individual.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/individuals/{drive_id}/individual/assign":{"put":{"tags":["individuals"],"summary":"Assign a face to another individual","description":"Assign face(s) to an individual.","operationId":"assign_face_to_individual_user_individuals__drive_id__individual_assign_put","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive to create the individual in"},"description":"The id of the drive to create the individual in"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_assign_face_to_individual_user_individuals__drive_id__individual_assign_put"}}}},"responses":{"200":{"description":"The new individual","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndividualDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_assign_face_to_individual_user_individuals__drive_id__individual_assign_put":{"properties":{"face_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Face IDs","description":"The id of the faces to assign"},"individual_id":{"type":"string","format":"uuid","title":"Individual ID","description":"The id of the individual to assign the face to (must be a labeled individual)"},"old_individual_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Old Individual ID","description":"If provided, the individual that the faces are being taken from (must be a labeled individual)"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["face_ids","individual_id"],"title":"Body_assign_face_to_individual_user_individuals__drive_id__individual_assign_put"},"IndividualDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"labeled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Labeled"},"preview_face":{"anyOf":[{"$ref":"#/components/schemas/FaceDTO"},{"type":"null"}]},"preview_image":{"anyOf":[{"$ref":"#/components/schemas/PreviewDTO"},{"type":"null"}]}},"type":"object","required":["id","name"],"title":"IndividualDTO"},"FaceDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"bbox":{"additionalProperties":{"type":"integer"},"type":"object","title":"Bbox"},"face_preview":{"$ref":"#/components/schemas/PreviewDTO"},"individual_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Individual Id"}},"type":"object","required":["id","bbox","face_preview"],"title":"FaceDTO"},"PreviewDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"frame":{"type":"integer","title":"Frame"},"signed_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Url"}},"type":"object","required":["id","frame"],"title":"PreviewDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Merges individuals together into one

> Merge multiple individuals into one, combining their faces and setting a new name.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/individuals/{drive_id}/individual/merge":{"put":{"tags":["individuals"],"summary":"Merges individuals together into one","description":"Merge multiple individuals into one, combining their faces and setting a new name.","operationId":"merge_faces_individuals__drive_id__individual_merge_put","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive to get faces for"},"description":"The id of the drive to get faces for"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_merge_faces_individuals__drive_id__individual_merge_put"}}}},"responses":{"200":{"description":"The newly merged individual","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndividualDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_merge_faces_individuals__drive_id__individual_merge_put":{"properties":{"individual_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Individual IDs","description":"The ids of the individuals to merge"},"name":{"type":"string","title":"Name for combined individuals","description":"The new name given to the combined individuals"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["individual_ids","name"],"title":"Body_merge_faces_individuals__drive_id__individual_merge_put"},"IndividualDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"labeled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Labeled"},"preview_face":{"anyOf":[{"$ref":"#/components/schemas/FaceDTO"},{"type":"null"}]},"preview_image":{"anyOf":[{"$ref":"#/components/schemas/PreviewDTO"},{"type":"null"}]}},"type":"object","required":["id","name"],"title":"IndividualDTO"},"FaceDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"bbox":{"additionalProperties":{"type":"integer"},"type":"object","title":"Bbox"},"face_preview":{"$ref":"#/components/schemas/PreviewDTO"},"individual_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Individual Id"}},"type":"object","required":["id","bbox","face_preview"],"title":"FaceDTO"},"PreviewDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"frame":{"type":"integer","title":"Frame"},"signed_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Url"}},"type":"object","required":["id","frame"],"title":"PreviewDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Delete faces from an individual

> Delete faces from an individual. NOTE: permanently deletes the faces from the DB.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/individuals/{drive_id}/individual/faces":{"delete":{"tags":["individuals"],"summary":"Delete faces from an individual","description":"Delete faces from an individual. NOTE: permanently deletes the faces from the DB.","operationId":"delete_faces_from_individual_route_individuals__drive_id__individual_faces_delete","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive to create the individual in"},"description":"The id of the drive to create the individual in"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_delete_faces_from_individual_route_individuals__drive_id__individual_faces_delete"}}}},"responses":{"200":{"description":"The new individual","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndividualDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_delete_faces_from_individual_route_individuals__drive_id__individual_faces_delete":{"properties":{"face_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Face IDs","description":"The id of the faces to assign"},"individual_id":{"type":"string","format":"uuid","title":"Individual ID","description":"The id of the individual to delete the face from (must be a labeled individual)"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["face_ids","individual_id"],"title":"Body_delete_faces_from_individual_route_individuals__drive_id__individual_faces_delete"},"IndividualDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"labeled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Labeled"},"preview_face":{"anyOf":[{"$ref":"#/components/schemas/FaceDTO"},{"type":"null"}]},"preview_image":{"anyOf":[{"$ref":"#/components/schemas/PreviewDTO"},{"type":"null"}]}},"type":"object","required":["id","name"],"title":"IndividualDTO"},"FaceDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"bbox":{"additionalProperties":{"type":"integer"},"type":"object","title":"Bbox"},"face_preview":{"$ref":"#/components/schemas/PreviewDTO"},"individual_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Individual Id"}},"type":"object","required":["id","bbox","face_preview"],"title":"FaceDTO"},"PreviewDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"frame":{"type":"integer","title":"Frame"},"signed_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Url"}},"type":"object","required":["id","frame"],"title":"PreviewDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## List all faces for an individual

> Get a list of all faces for an individual by id.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/individuals/{individual_id}/faces":{"get":{"tags":["individuals"],"summary":"List all faces for an individual","description":"Get a list of all faces for an individual by id.","operationId":"read_individual_faces_individuals__individual_id__faces_get","parameters":[{"name":"individual_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The individual id","description":"The id of the individual to get faces for"},"description":"The id of the individual to get faces for"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_read_individual_faces_individuals__individual_id__faces_get"}}}},"responses":{"200":{"description":"A list of all faces for an individual","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FaceDTO"},"title":"Response Read Individual Faces Individuals  Individual Id  Faces Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_read_individual_faces_individuals__individual_id__faces_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_read_individual_faces_individuals__individual_id__faces_get"},"FaceDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"bbox":{"additionalProperties":{"type":"integer"},"type":"object","title":"Bbox"},"face_preview":{"$ref":"#/components/schemas/PreviewDTO"},"individual_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Individual Id"}},"type":"object","required":["id","bbox","face_preview"],"title":"FaceDTO"},"PreviewDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"frame":{"type":"integer","title":"Frame"},"signed_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Url"}},"type":"object","required":["id","frame"],"title":"PreviewDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```


# Faces

## Get the individual a face is for

> Get the individual that a face is for by id

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/faces/{face_id}/individual":{"get":{"tags":["faces"],"summary":"Get the individual a face is for","description":"Get the individual that a face is for by id","operationId":"read_face_individual_faces__face_id__individual_get","parameters":[{"name":"face_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The face id","description":"The id of the face whose individual to get"},"description":"The id of the face whose individual to get"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_read_face_individual_faces__face_id__individual_get"}}}},"responses":{"200":{"description":"The individual","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndividualDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_read_face_individual_faces__face_id__individual_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_read_face_individual_faces__face_id__individual_get"},"IndividualDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"labeled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Labeled"},"preview_face":{"anyOf":[{"$ref":"#/components/schemas/FaceDTO"},{"type":"null"}]},"preview_image":{"anyOf":[{"$ref":"#/components/schemas/PreviewDTO"},{"type":"null"}]}},"type":"object","required":["id","name"],"title":"IndividualDTO"},"FaceDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"bbox":{"additionalProperties":{"type":"integer"},"type":"object","title":"Bbox"},"face_preview":{"$ref":"#/components/schemas/PreviewDTO"},"individual_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Individual Id"}},"type":"object","required":["id","bbox","face_preview"],"title":"FaceDTO"},"PreviewDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"frame":{"type":"integer","title":"Frame"},"signed_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Url"}},"type":"object","required":["id","frame"],"title":"PreviewDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get the asset a face is for

> Get the asset that a face is for by id

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/faces/{face_id}/asset":{"get":{"tags":["faces"],"summary":"Get the asset a face is for","description":"Get the asset that a face is for by id","operationId":"read_face_asset_faces__face_id__asset_get","parameters":[{"name":"face_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The face id","description":"The id of the face whose asset to get"},"description":"The id of the face whose asset to get"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_read_face_asset_faces__face_id__asset_get"}}}},"responses":{"200":{"description":"The asset","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_read_face_asset_faces__face_id__asset_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_read_face_asset_faces__face_id__asset_get"},"AssetDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"path":{"type":"string","title":"Path"},"name":{"type":"string","title":"Name"},"extension":{"type":"string","title":"Extension"},"updated":{"type":"string","format":"date-time","title":"Updated"},"created":{"type":"string","format":"date-time","title":"Created"},"type":{"$ref":"#/components/schemas/AssetType"},"size_bytes":{"type":"integer","title":"Size Bytes"},"stack_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Stack Id"},"stack_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stack Number"},"is_fs_draft_blob":{"type":"boolean","title":"Is Fs Draft Blob"},"is_fs_null_blob":{"type":"boolean","title":"Is Fs Null Blob"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"ai_indexed":{"type":"boolean","title":"Ai Indexed"},"system_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"System Metadata","default":{}},"custom_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Custom Metadata","default":{}},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"palette":{"items":{"items":{"type":"integer"},"type":"array"},"type":"array","title":"Palette"},"ocr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ocr"},"transcription_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Transcription Id"},"faces_present":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Faces Present"},"content_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Content Length"},"preview_job_state":{"$ref":"#/components/schemas/JobState"},"metadata_job_state":{"$ref":"#/components/schemas/JobState"},"core_vision_job_state":{"$ref":"#/components/schemas/JobState"},"color_palette_job_state":{"$ref":"#/components/schemas/JobState"},"core_audio_job_state":{"$ref":"#/components/schemas/JobState"},"audio_job_state":{"$ref":"#/components/schemas/JobState"},"facial_recognition_job_state":{"$ref":"#/components/schemas/JobState"},"proxy_job_state":{"$ref":"#/components/schemas/JobState"},"audio_proxy_job_state":{"$ref":"#/components/schemas/JobState"},"transcription_job_state":{"$ref":"#/components/schemas/JobState"},"objects":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Objects"},"texture_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Texture Data"},"integration_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Integration Data"},"preview_images":{"items":{"$ref":"#/components/schemas/PreviewDTO"},"type":"array","title":"Preview Images"},"custom_thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}]},"proxy":{"anyOf":[{"$ref":"#/components/schemas/ProxyDTO"},{"type":"null"}]},"audio_proxy":{"anyOf":[{"$ref":"#/components/schemas/ProxyDTO"},{"type":"null"}]}},"type":"object","required":["id","drive_id","path","name","extension","updated","created","type","size_bytes","is_fs_draft_blob","is_fs_null_blob","ai_indexed","palette","preview_job_state","metadata_job_state","core_vision_job_state","color_palette_job_state","core_audio_job_state","facial_recognition_job_state","proxy_job_state","audio_proxy_job_state","transcription_job_state","preview_images"],"title":"AssetDTO","description":"Full asset DTO with relationship fields that require eager loading."},"AssetType":{"type":"string","enum":["IMAGE","VIDEO","AUDIO","DOCUMENT","HDR","HDRI","PHOTOSHOP","ILLUSTRATOR","EXR","OBJECT","VECTOR","OTHER","MAYA","MAX","BLENDER","HOUDINI","UNREAL","UNITY","AFTER_EFFECTS","MOGRT"],"title":"AssetType"},"JobState":{"type":"string","enum":["NOT_STARTED","IN_PROGRESS","COMPLETED","FAILED","INSUFFICIENT_CREDITS"],"title":"JobState","description":"Enum for asset job states"},"PreviewDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"frame":{"type":"integer","title":"Frame"},"signed_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Url"}},"type":"object","required":["id","frame"],"title":"PreviewDTO"},"ProxyDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"}},"type":"object","required":["id"],"title":"ProxyDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## GET /faces

> List all unclustered faces

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/faces":{"get":{"tags":["faces"],"summary":"List all unclustered faces","operationId":"read_faces_faces_get","parameters":[{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"Drive ID","description":"The drive id to list faces for"},"description":"The drive id to list faces for"},{"name":"page","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Page number","description":"The page to query","default":0},"description":"The page to query"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit per page","description":"The limit that is fetched per page","default":100},"description":"The limit that is fetched per page"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_read_faces_faces_get"}}}},"responses":{"200":{"description":"List of all unclustered faces","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FaceDTO"},"title":"Response Read Faces Faces Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_read_faces_faces_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_read_faces_faces_get"},"FaceDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"bbox":{"additionalProperties":{"type":"integer"},"type":"object","title":"Bbox"},"face_preview":{"$ref":"#/components/schemas/PreviewDTO"},"individual_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Individual Id"}},"type":"object","required":["id","bbox","face_preview"],"title":"FaceDTO"},"PreviewDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"frame":{"type":"integer","title":"Frame"},"signed_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Url"}},"type":"object","required":["id","frame"],"title":"PreviewDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get the dynamic views for a drive

> Get the dynamic views for a drive

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/dynamic-views":{"get":{"tags":["faces"],"summary":"Get the dynamic views for a drive","description":"Get the dynamic views for a drive","operationId":"get_drive_dynamic_views_route_dynamic_views_get","parameters":[{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_drive_dynamic_views_route_dynamic_views_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DynamicView"},"title":"Response Get Drive Dynamic Views Route Dynamic Views Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_drive_dynamic_views_route_dynamic_views_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_drive_dynamic_views_route_dynamic_views_get"},"DynamicView":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"filters":{"anyOf":[{"items":{"$ref":"#/components/schemas/AddedFilterForStorage"},"type":"array"},{"type":"null"}],"title":"Filters"},"columns":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Columns"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"is_locked":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Locked"},"is_private":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Private"},"display_settings":{"anyOf":[{"$ref":"#/components/schemas/DynamicViewDisplaySettings"},{"type":"null"}]},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"icon_type":{"anyOf":[{"$ref":"#/components/schemas/DynamicViewIconType"},{"type":"null"}]},"sort":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},"type":"object","required":["id","name"],"title":"DynamicView"},"AddedFilterForStorage":{"properties":{"id":{"title":"Id"},"options":{"items":{"$ref":"#/components/schemas/FilterOption"},"type":"array","title":"Options"},"clause":{"$ref":"#/components/schemas/FilterClauseVal"},"ignore_options":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ignore Options"}},"type":"object","required":["id","options","clause"],"title":"AddedFilterForStorage"},"FilterOption":{"properties":{"client_val":{"type":"string","title":"Client Val"},"server_val":{"type":"string","title":"Server Val"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"}},"type":"object","required":["client_val","server_val"],"title":"FilterOption"},"FilterClauseVal":{"type":"string","enum":["is","is any of","is not","is true","is false","is not true","is not false","has","doesn't have","before","after","between","is directly in","is under","is not in","<","< any of","<=","<= any of",">","> any of",">=",">= any of","hasn't started","in progress of","completed","failed","includes","does not include","contains","does not contain","does not start with","starts with","end with","is empty","is not empty"],"title":"FilterClauseVal","description":"Filter Clause Values Enum. Contains all filter clause values"},"DynamicViewDisplaySettings":{"properties":{"card_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Card Size"},"thumbnail_view":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail View"},"view":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"View"},"metadata_attribute_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Metadata Attribute Ids"},"flatten_directories":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Flatten Directories"}},"type":"object","title":"DynamicViewDisplaySettings"},"DynamicViewIconType":{"type":"string","enum":["color","emoji","url"],"title":"DynamicViewIconType"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## POST /dynamic-views

> Add a dynamic view for a drive

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/dynamic-views":{"post":{"tags":["faces"],"summary":"Add a dynamic view for a drive","operationId":"add_dynamic_view_route_dynamic_views_post","parameters":[{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_add_dynamic_view_route_dynamic_views_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_add_dynamic_view_route_dynamic_views_post":{"properties":{"name":{"type":"string","title":"The dynamic view name","description":"The dynamic view name to update"},"display_settings":{"anyOf":[{"$ref":"#/components/schemas/DynamicViewDisplaySettings"},{"type":"null"}],"title":"The dynamic view display settings","description":"The dynamic view display settings to update"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The dynamic view icon","description":"The dynamic view icon to update"},"icon_type":{"anyOf":[{"$ref":"#/components/schemas/DynamicViewIconType"},{"type":"null"}],"title":"The dynamic view icon type","description":"The dynamic view icon type to update"},"is_locked":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Whether the dynamic view is locked","description":"If locked, other users cannot modify the dynamic view.","default":false},"is_private":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Whether the dynamic view is private","description":"If private, only the owner can see this dynamic view.","default":false},"filters":{"anyOf":[{"items":{"$ref":"#/components/schemas/AddedFilterForStorage"},"type":"array"},{"type":"null"}],"title":"The dynamic view filters","description":"The dynamic view filters to update","default":[]},"sort":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The dynamic view sort","description":"The dynamic view sort to update (include '-' at beginning for descending)"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["name"],"title":"Body_add_dynamic_view_route_dynamic_views_post"},"DynamicViewDisplaySettings":{"properties":{"card_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Card Size"},"thumbnail_view":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail View"},"view":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"View"},"metadata_attribute_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Metadata Attribute Ids"},"flatten_directories":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Flatten Directories"}},"type":"object","title":"DynamicViewDisplaySettings"},"DynamicViewIconType":{"type":"string","enum":["color","emoji","url"],"title":"DynamicViewIconType"},"AddedFilterForStorage":{"properties":{"id":{"title":"Id"},"options":{"items":{"$ref":"#/components/schemas/FilterOption"},"type":"array","title":"Options"},"clause":{"$ref":"#/components/schemas/FilterClauseVal"},"ignore_options":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ignore Options"}},"type":"object","required":["id","options","clause"],"title":"AddedFilterForStorage"},"FilterOption":{"properties":{"client_val":{"type":"string","title":"Client Val"},"server_val":{"type":"string","title":"Server Val"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"}},"type":"object","required":["client_val","server_val"],"title":"FilterOption"},"FilterClauseVal":{"type":"string","enum":["is","is any of","is not","is true","is false","is not true","is not false","has","doesn't have","before","after","between","is directly in","is under","is not in","<","< any of","<=","<= any of",">","> any of",">=",">= any of","hasn't started","in progress of","completed","failed","includes","does not include","contains","does not contain","does not start with","starts with","end with","is empty","is not empty"],"title":"FilterClauseVal","description":"Filter Clause Values Enum. Contains all filter clause values"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Update a dynamic view for a drive

> Modify a dynamic view for a drive

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/dynamic-views/{dynamic_view_id}":{"put":{"tags":["faces"],"summary":"Update a dynamic view for a drive","description":"Modify a dynamic view for a drive","operationId":"update_drive_dynamic_view_route_dynamic_views__dynamic_view_id__put","parameters":[{"name":"dynamic_view_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The dynamic view id"}},{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_update_drive_dynamic_view_route_dynamic_views__dynamic_view_id__put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_update_drive_dynamic_view_route_dynamic_views__dynamic_view_id__put":{"properties":{"name":{"type":"string","title":"The dynamic view name","description":"The dynamic view name to update"},"filters":{"items":{"$ref":"#/components/schemas/AddedFilterForStorage"},"type":"array","title":"The dynamic view filters","description":"The dynamic view filters to update"},"columns":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"The dynamic view columns","description":"The dynamic view columns to update"},"display_settings":{"anyOf":[{"$ref":"#/components/schemas/DynamicViewDisplaySettings"},{"type":"null"}],"title":"The dynamic view display settings","description":"The dynamic view display settings to update"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The dynamic view icon","description":"The dynamic view icon to update"},"icon_type":{"anyOf":[{"$ref":"#/components/schemas/DynamicViewIconType"},{"type":"null"}],"title":"The dynamic view icon type","description":"The dynamic view icon type to update"},"sort":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The dynamic view sort","description":"The dynamic view sort to update (include '-' at beginning for descending)"},"is_locked":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Whether the dynamic view is locked","description":"If locked, other users cannot modify the dynamic view.","default":false},"is_private":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Whether the dynamic view is private","description":"If private, only the owner can see this dynamic view.","default":false},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["name","filters"],"title":"Body_update_drive_dynamic_view_route_dynamic_views__dynamic_view_id__put"},"AddedFilterForStorage":{"properties":{"id":{"title":"Id"},"options":{"items":{"$ref":"#/components/schemas/FilterOption"},"type":"array","title":"Options"},"clause":{"$ref":"#/components/schemas/FilterClauseVal"},"ignore_options":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ignore Options"}},"type":"object","required":["id","options","clause"],"title":"AddedFilterForStorage"},"FilterOption":{"properties":{"client_val":{"type":"string","title":"Client Val"},"server_val":{"type":"string","title":"Server Val"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"}},"type":"object","required":["client_val","server_val"],"title":"FilterOption"},"FilterClauseVal":{"type":"string","enum":["is","is any of","is not","is true","is false","is not true","is not false","has","doesn't have","before","after","between","is directly in","is under","is not in","<","< any of","<=","<= any of",">","> any of",">=",">= any of","hasn't started","in progress of","completed","failed","includes","does not include","contains","does not contain","does not start with","starts with","end with","is empty","is not empty"],"title":"FilterClauseVal","description":"Filter Clause Values Enum. Contains all filter clause values"},"DynamicViewDisplaySettings":{"properties":{"card_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Card Size"},"thumbnail_view":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail View"},"view":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"View"},"metadata_attribute_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Metadata Attribute Ids"},"flatten_directories":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Flatten Directories"}},"type":"object","title":"DynamicViewDisplaySettings"},"DynamicViewIconType":{"type":"string","enum":["color","emoji","url"],"title":"DynamicViewIconType"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## DELETE /dynamic-views/{dynamic\_view\_id}

> Delete Dynamic View Route

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/dynamic-views/{dynamic_view_id}":{"delete":{"tags":["faces"],"summary":"Delete Dynamic View Route","operationId":"delete_dynamic_view_route_dynamic_views__dynamic_view_id__delete","parameters":[{"name":"dynamic_view_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The dynamic view id"}},{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_delete_dynamic_view_route_dynamic_views__dynamic_view_id__delete"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_delete_dynamic_view_route_dynamic_views__dynamic_view_id__delete":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_delete_dynamic_view_route_dynamic_views__dynamic_view_id__delete"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## GET /dynamic-views/{dynamic\_view\_id}/exports/{export\_format}

> Export dynamic view data

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/dynamic-views/{dynamic_view_id}/exports/{export_format}":{"get":{"tags":["faces"],"summary":"Export dynamic view data","operationId":"get_dynamic_view_exported_data_dynamic_views__dynamic_view_id__exports__export_format__get","parameters":[{"name":"dynamic_view_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The dynamic view id"}},{"name":"export_format","in":"path","required":true,"schema":{"$ref":"#/components/schemas/ExportFormat","title":"The format"}},{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}},{"name":"os","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/OperatingSystem"},{"type":"null"}],"title":"The os to be exported to"}},{"name":"timezone","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The timezone to be exported to (ex: 'America/New_York')"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_dynamic_view_exported_data_dynamic_views__dynamic_view_id__exports__export_format__get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Get Dynamic View Exported Data Dynamic Views  Dynamic View Id  Exports  Export Format  Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"ExportFormat":{"type":"string","enum":["csv","tsv","txt","ale","premiere","davinci","avid"],"title":"ExportFormat"},"OperatingSystem":{"type":"string","enum":["Windows","Linux","Debian","Fedora","Darwin"],"title":"OperatingSystem","description":"Operating System Enum from the result of platform.system()"},"Body_get_dynamic_view_exported_data_dynamic_views__dynamic_view_id__exports__export_format__get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_dynamic_view_exported_data_dynamic_views__dynamic_view_id__exports__export_format__get"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```


# Collections

## List all collections in a specific drive

> Get a listing of all the collections in the database

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/collections":{"get":{"tags":["collections"],"summary":"List all collections in a specific drive","description":"Get a listing of all the collections in the database","operationId":"get_drive_collections_collections_get","parameters":[{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive we want to get collections from"},"description":"The id of the drive we want to get collections from"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_drive_collections_collections_get"}}}},"responses":{"200":{"description":"A list of all collections in the specified drive.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CollectionDTO"},"title":"Response Get Drive Collections Collections Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_drive_collections_collections_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_drive_collections_collections_get"},"CollectionDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"created_by":{"anyOf":[{"$ref":"#/components/schemas/UserDTOBase"},{"type":"null"}]},"is_public_enabled":{"type":"boolean","title":"Is Public Enabled"},"allowed_actions":{"items":{"$ref":"#/components/schemas/Action"},"type":"array","title":"Allowed Actions"},"invite_id":{"type":"string","format":"uuid","title":"Invite Id"},"settings":{"$ref":"#/components/schemas/CollectionSettings-Output"},"icon_type":{"$ref":"#/components/schemas/DriveIconType"},"icon":{"type":"string","title":"Icon"},"icon_attachment":{"anyOf":[{"$ref":"#/components/schemas/AttachmentToDownloadDTO"},{"type":"null"}]},"background_image":{"type":"string","title":"Background Image"},"background_image_attachment":{"anyOf":[{"$ref":"#/components/schemas/AttachmentToDownloadDTO"},{"type":"null"}]},"preview_image":{"anyOf":[{"$ref":"#/components/schemas/PreviewDTO"},{"type":"null"}]},"is_expired":{"type":"boolean","title":"Is Expired","default":false},"password_protected":{"type":"boolean","title":"Password Protected"},"expiration_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expiration Date"}},"type":"object","required":["id","name","description","drive_id","created_by","is_public_enabled","allowed_actions","invite_id","settings","icon_type","icon","background_image","password_protected"],"title":"CollectionDTO"},"UserDTOBase":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"}},"type":"object","required":["id","name","email","avatar_url","user_type"],"title":"UserDTOBase"},"UserType":{"type":"string","enum":["regular","group"],"title":"UserType"},"Action":{"type":"string","enum":["manage","edit","share","comment","edit_metadata","download","read","read_asset_details","read_metadata","manage_webhooks","manage_drive","view_stack_versions"],"title":"Action"},"CollectionSettings-Output":{"properties":{"card_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Card Size"},"thumbnail_view":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail View"},"view":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"View"},"metadata_attribute_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Metadata Attribute Ids"},"sort":{"anyOf":[{"$ref":"#/components/schemas/CollectionSettingSort"},{"type":"null"}]}},"type":"object","title":"CollectionSettings"},"CollectionSettingSort":{"properties":{"attribute":{"type":"string","title":"Attribute"},"direction":{"anyOf":[{"$ref":"#/components/schemas/CollectionSettingSortDirection"},{"type":"null"}]}},"type":"object","required":["attribute"],"title":"CollectionSettingSort"},"CollectionSettingSortDirection":{"type":"string","enum":["ASC","DESC","CUSTOM"],"title":"CollectionSettingSortDirection"},"DriveIconType":{"type":"string","enum":["color","emoji","attachment"],"title":"DriveIconType"},"AttachmentToDownloadDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"uploader_id":{"type":"string","format":"uuid","title":"Uploader Id"},"uploaded":{"type":"boolean","title":"Uploaded"},"name":{"type":"string","title":"Name"},"mime_type":{"type":"string","title":"Mime Type"},"size":{"type":"integer","title":"Size"},"download_url":{"type":"string","title":"Download Url"}},"type":"object","required":["id","drive_id","uploader_id","uploaded","name","mime_type","size","download_url"],"title":"AttachmentToDownloadDTO"},"PreviewDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"frame":{"type":"integer","title":"Frame"},"signed_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Url"}},"type":"object","required":["id","frame"],"title":"PreviewDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Create a collection

> Create a new user collection of assets

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/collections":{"post":{"tags":["collections"],"summary":"Create a collection","description":"Create a new user collection of assets","operationId":"create_collection_collections_post","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_create_collection_collections_post"}}}},"responses":{"200":{"description":"The id of the created user collection","content":{"application/json":{"schema":{"type":"string","format":"uuid","title":"Response Create Collection Collections Post"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_create_collection_collections_post":{"properties":{"name":{"type":"string","title":"The name of the user collection","description":"The name of the user collection to be created"},"description":{"type":"string","title":"The description of the user collection","description":"The description of the user collection to be created","default":""},"drive_id":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive to create the collection in"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["name","drive_id"],"title":"Body_create_collection_collections_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get a collection by its id

> Get a collection by id

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/collections/{collection_id}":{"get":{"tags":["collections"],"summary":"Get a collection by its id","description":"Get a collection by id","operationId":"get_collection_collections__collection_id__get","parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The collection id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_collection_collections__collection_id__get"}}}},"responses":{"200":{"description":"The collection","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/FullCollectionDTO"},{"type":"null"}],"title":"Response Get Collection Collections  Collection Id  Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_collection_collections__collection_id__get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_collection_collections__collection_id__get"},"FullCollectionDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"created_by":{"anyOf":[{"$ref":"#/components/schemas/UserDTOBase"},{"type":"null"}]},"is_public_enabled":{"type":"boolean","title":"Is Public Enabled"},"allowed_actions":{"items":{"$ref":"#/components/schemas/Action"},"type":"array","title":"Allowed Actions"},"invite_id":{"type":"string","format":"uuid","title":"Invite Id"},"settings":{"$ref":"#/components/schemas/CollectionSettings-Output"},"icon_type":{"$ref":"#/components/schemas/DriveIconType"},"icon":{"type":"string","title":"Icon"},"icon_attachment":{"anyOf":[{"$ref":"#/components/schemas/AttachmentToDownloadDTO"},{"type":"null"}]},"background_image":{"type":"string","title":"Background Image"},"background_image_attachment":{"anyOf":[{"$ref":"#/components/schemas/AttachmentToDownloadDTO"},{"type":"null"}]},"preview_image":{"anyOf":[{"$ref":"#/components/schemas/PreviewDTO"},{"type":"null"}]},"is_expired":{"type":"boolean","title":"Is Expired","default":false},"password_protected":{"type":"boolean","title":"Password Protected"},"expiration_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expiration Date"},"num_assets":{"type":"integer","title":"Num Assets"},"num_directories":{"type":"integer","title":"Num Directories"},"size":{"type":"number","title":"Size"}},"type":"object","required":["id","name","description","drive_id","created_by","is_public_enabled","allowed_actions","invite_id","settings","icon_type","icon","background_image","password_protected","num_assets","num_directories","size"],"title":"FullCollectionDTO"},"UserDTOBase":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"}},"type":"object","required":["id","name","email","avatar_url","user_type"],"title":"UserDTOBase"},"UserType":{"type":"string","enum":["regular","group"],"title":"UserType"},"Action":{"type":"string","enum":["manage","edit","share","comment","edit_metadata","download","read","read_asset_details","read_metadata","manage_webhooks","manage_drive","view_stack_versions"],"title":"Action"},"CollectionSettings-Output":{"properties":{"card_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Card Size"},"thumbnail_view":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail View"},"view":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"View"},"metadata_attribute_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Metadata Attribute Ids"},"sort":{"anyOf":[{"$ref":"#/components/schemas/CollectionSettingSort"},{"type":"null"}]}},"type":"object","title":"CollectionSettings"},"CollectionSettingSort":{"properties":{"attribute":{"type":"string","title":"Attribute"},"direction":{"anyOf":[{"$ref":"#/components/schemas/CollectionSettingSortDirection"},{"type":"null"}]}},"type":"object","required":["attribute"],"title":"CollectionSettingSort"},"CollectionSettingSortDirection":{"type":"string","enum":["ASC","DESC","CUSTOM"],"title":"CollectionSettingSortDirection"},"DriveIconType":{"type":"string","enum":["color","emoji","attachment"],"title":"DriveIconType"},"AttachmentToDownloadDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"uploader_id":{"type":"string","format":"uuid","title":"Uploader Id"},"uploaded":{"type":"boolean","title":"Uploaded"},"name":{"type":"string","title":"Name"},"mime_type":{"type":"string","title":"Mime Type"},"size":{"type":"integer","title":"Size"},"download_url":{"type":"string","title":"Download Url"}},"type":"object","required":["id","drive_id","uploader_id","uploaded","name","mime_type","size","download_url"],"title":"AttachmentToDownloadDTO"},"PreviewDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"frame":{"type":"integer","title":"Frame"},"signed_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Url"}},"type":"object","required":["id","frame"],"title":"PreviewDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Update a collection

> Update a collection

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/collections/{collection_id}":{"put":{"tags":["collections"],"summary":"Update a collection","description":"Update a collection","operationId":"update_collection_collections__collection_id__put","parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The collection id","description":"The id of the collection to be updated"},"description":"The id of the collection to be updated"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_update_collection_collections__collection_id__put"}}}},"responses":{"200":{"description":"The updated collection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CollectionDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_update_collection_collections__collection_id__put":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Collection name","description":"The new name for the collection"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Collection description","description":"The new description for the collection"},"is_public_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is public visible"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"icon_type":{"anyOf":[{"$ref":"#/components/schemas/DriveIconType"},{"type":"null"}],"title":"Icon type"},"allowed_actions":{"anyOf":[{"items":{"$ref":"#/components/schemas/Action"},"type":"array"},{"type":"null"}],"title":"Allowed Actions"},"background_image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"background_image"},"settings":{"anyOf":[{"$ref":"#/components/schemas/CollectionSettings-Input"},{"type":"null"}],"title":"Settings"},"expiration_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"The expiration date of the collection","description":"The expiration date of the collection"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password of the collection","description":"The password of the collection"},"removed_password":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Removed password","description":"remove the collection password","default":false},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_update_collection_collections__collection_id__put"},"DriveIconType":{"type":"string","enum":["color","emoji","attachment"],"title":"DriveIconType"},"Action":{"type":"string","enum":["manage","edit","share","comment","edit_metadata","download","read","read_asset_details","read_metadata","manage_webhooks","manage_drive","view_stack_versions"],"title":"Action"},"CollectionSettings-Input":{"properties":{"card_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Card Size"},"thumbnail_view":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail View"},"view":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"View"},"metadata_attribute_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Metadata Attribute Ids"},"sort":{"anyOf":[{"$ref":"#/components/schemas/CollectionSettingSort"},{"type":"null"}]}},"type":"object","title":"CollectionSettings"},"CollectionSettingSort":{"properties":{"attribute":{"type":"string","title":"Attribute"},"direction":{"anyOf":[{"$ref":"#/components/schemas/CollectionSettingSortDirection"},{"type":"null"}]}},"type":"object","required":["attribute"],"title":"CollectionSettingSort"},"CollectionSettingSortDirection":{"type":"string","enum":["ASC","DESC","CUSTOM"],"title":"CollectionSettingSortDirection"},"CollectionDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"created_by":{"anyOf":[{"$ref":"#/components/schemas/UserDTOBase"},{"type":"null"}]},"is_public_enabled":{"type":"boolean","title":"Is Public Enabled"},"allowed_actions":{"items":{"$ref":"#/components/schemas/Action"},"type":"array","title":"Allowed Actions"},"invite_id":{"type":"string","format":"uuid","title":"Invite Id"},"settings":{"$ref":"#/components/schemas/CollectionSettings-Output"},"icon_type":{"$ref":"#/components/schemas/DriveIconType"},"icon":{"type":"string","title":"Icon"},"icon_attachment":{"anyOf":[{"$ref":"#/components/schemas/AttachmentToDownloadDTO"},{"type":"null"}]},"background_image":{"type":"string","title":"Background Image"},"background_image_attachment":{"anyOf":[{"$ref":"#/components/schemas/AttachmentToDownloadDTO"},{"type":"null"}]},"preview_image":{"anyOf":[{"$ref":"#/components/schemas/PreviewDTO"},{"type":"null"}]},"is_expired":{"type":"boolean","title":"Is Expired","default":false},"password_protected":{"type":"boolean","title":"Password Protected"},"expiration_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expiration Date"}},"type":"object","required":["id","name","description","drive_id","created_by","is_public_enabled","allowed_actions","invite_id","settings","icon_type","icon","background_image","password_protected"],"title":"CollectionDTO"},"UserDTOBase":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"}},"type":"object","required":["id","name","email","avatar_url","user_type"],"title":"UserDTOBase"},"UserType":{"type":"string","enum":["regular","group"],"title":"UserType"},"CollectionSettings-Output":{"properties":{"card_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Card Size"},"thumbnail_view":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail View"},"view":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"View"},"metadata_attribute_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Metadata Attribute Ids"},"sort":{"anyOf":[{"$ref":"#/components/schemas/CollectionSettingSort"},{"type":"null"}]}},"type":"object","title":"CollectionSettings"},"AttachmentToDownloadDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"uploader_id":{"type":"string","format":"uuid","title":"Uploader Id"},"uploaded":{"type":"boolean","title":"Uploaded"},"name":{"type":"string","title":"Name"},"mime_type":{"type":"string","title":"Mime Type"},"size":{"type":"integer","title":"Size"},"download_url":{"type":"string","title":"Download Url"}},"type":"object","required":["id","drive_id","uploader_id","uploaded","name","mime_type","size","download_url"],"title":"AttachmentToDownloadDTO"},"PreviewDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"frame":{"type":"integer","title":"Frame"},"signed_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Url"}},"type":"object","required":["id","frame"],"title":"PreviewDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Delete a collection

> Delete a collection

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/collections/{collection_id}":{"delete":{"tags":["collections"],"summary":"Delete a collection","description":"Delete a collection","operationId":"delete_collection_collections__collection_id__delete","parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The collection id","description":"The id of the collection to be deleted"},"description":"The id of the collection to be deleted"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_delete_collection_collections__collection_id__delete"}}}},"responses":{"200":{"description":"True if the collection was deleted, false if it was not found","content":{"application/json":{"schema":{"type":"boolean","title":"Response Delete Collection Collections  Collection Id  Delete"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_delete_collection_collections__collection_id__delete":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_delete_collection_collections__collection_id__delete"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get an MRSS feed for a collection

> Return an MRSS (Media RSS) feed for a collection.\
> \
> This endpoint is intended for public consumption and only returns data when\
> the collection's public link visibility is enabled. If the collection is\
> not public or is expired, a 404 is returned. If the collection is\
> password-protected and the password is incorrect, a 403 is returned.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/collections/{collection_id}/mrss":{"get":{"tags":["collections"],"summary":"Get an MRSS feed for a collection","description":"Return an MRSS (Media RSS) feed for a collection.\n\nThis endpoint is intended for public consumption and only returns data when\nthe collection's public link visibility is enabled. If the collection is\nnot public or is expired, a 404 is returned. If the collection is\npassword-protected and the password is incorrect, a 403 is returned.","operationId":"get_collection_mrss_collections__collection_id__mrss_get","parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The collection id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page number","description":"1-indexed page of assets in the collection to return.","default":1},"description":"1-indexed page of assets in the collection to return."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"title":"Page size","description":"Maximum number of assets to include in the MRSS feed.","default":20},"description":"Maximum number of assets to include in the MRSS feed."},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_collection_mrss_collections__collection_id__mrss_get"}}}},"responses":{"200":{"description":"An MRSS XML feed for the public collection","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_collection_mrss_collections__collection_id__mrss_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_collection_mrss_collections__collection_id__mrss_get"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Add assets to a collection

> Add assets to a collection, if they are in the same drive.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/collections/{collection_id}/assets":{"post":{"tags":["collections"],"summary":"Add assets to a collection","description":"Add assets to a collection, if they are in the same drive.","operationId":"add_assets_to_collection_route_collections__collection_id__assets_post","parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The collection id","description":"The id of the collection to add assets to"},"description":"The id of the collection to add assets to"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_add_assets_to_collection_route_collections__collection_id__assets_post"}}}},"responses":{"200":{"description":"The updated collection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CollectionDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_add_assets_to_collection_route_collections__collection_id__assets_post":{"properties":{"asset_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"The asset ids to add to the collection","description":"The ids of the assets to add to the collection","default":[]},"directory_paths":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"The directory paths","description":"Add all assets under these paths to the collection","default":[]},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_add_assets_to_collection_route_collections__collection_id__assets_post"},"CollectionDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"created_by":{"anyOf":[{"$ref":"#/components/schemas/UserDTOBase"},{"type":"null"}]},"is_public_enabled":{"type":"boolean","title":"Is Public Enabled"},"allowed_actions":{"items":{"$ref":"#/components/schemas/Action"},"type":"array","title":"Allowed Actions"},"invite_id":{"type":"string","format":"uuid","title":"Invite Id"},"settings":{"$ref":"#/components/schemas/CollectionSettings-Output"},"icon_type":{"$ref":"#/components/schemas/DriveIconType"},"icon":{"type":"string","title":"Icon"},"icon_attachment":{"anyOf":[{"$ref":"#/components/schemas/AttachmentToDownloadDTO"},{"type":"null"}]},"background_image":{"type":"string","title":"Background Image"},"background_image_attachment":{"anyOf":[{"$ref":"#/components/schemas/AttachmentToDownloadDTO"},{"type":"null"}]},"preview_image":{"anyOf":[{"$ref":"#/components/schemas/PreviewDTO"},{"type":"null"}]},"is_expired":{"type":"boolean","title":"Is Expired","default":false},"password_protected":{"type":"boolean","title":"Password Protected"},"expiration_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expiration Date"}},"type":"object","required":["id","name","description","drive_id","created_by","is_public_enabled","allowed_actions","invite_id","settings","icon_type","icon","background_image","password_protected"],"title":"CollectionDTO"},"UserDTOBase":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"}},"type":"object","required":["id","name","email","avatar_url","user_type"],"title":"UserDTOBase"},"UserType":{"type":"string","enum":["regular","group"],"title":"UserType"},"Action":{"type":"string","enum":["manage","edit","share","comment","edit_metadata","download","read","read_asset_details","read_metadata","manage_webhooks","manage_drive","view_stack_versions"],"title":"Action"},"CollectionSettings-Output":{"properties":{"card_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Card Size"},"thumbnail_view":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail View"},"view":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"View"},"metadata_attribute_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Metadata Attribute Ids"},"sort":{"anyOf":[{"$ref":"#/components/schemas/CollectionSettingSort"},{"type":"null"}]}},"type":"object","title":"CollectionSettings"},"CollectionSettingSort":{"properties":{"attribute":{"type":"string","title":"Attribute"},"direction":{"anyOf":[{"$ref":"#/components/schemas/CollectionSettingSortDirection"},{"type":"null"}]}},"type":"object","required":["attribute"],"title":"CollectionSettingSort"},"CollectionSettingSortDirection":{"type":"string","enum":["ASC","DESC","CUSTOM"],"title":"CollectionSettingSortDirection"},"DriveIconType":{"type":"string","enum":["color","emoji","attachment"],"title":"DriveIconType"},"AttachmentToDownloadDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"uploader_id":{"type":"string","format":"uuid","title":"Uploader Id"},"uploaded":{"type":"boolean","title":"Uploaded"},"name":{"type":"string","title":"Name"},"mime_type":{"type":"string","title":"Mime Type"},"size":{"type":"integer","title":"Size"},"download_url":{"type":"string","title":"Download Url"}},"type":"object","required":["id","drive_id","uploader_id","uploaded","name","mime_type","size","download_url"],"title":"AttachmentToDownloadDTO"},"PreviewDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"frame":{"type":"integer","title":"Frame"},"signed_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Url"}},"type":"object","required":["id","frame"],"title":"PreviewDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Remove assets from a collection

> Remove assets from a collection

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/collections/{collection_id}/assets":{"delete":{"tags":["collections"],"summary":"Remove assets from a collection","description":"Remove assets from a collection","operationId":"delete_collection_assets_collections__collection_id__assets_delete","parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The collection id","description":"The id of the collection to remove a file from"},"description":"The id of the collection to remove a file from"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_delete_collection_assets_collections__collection_id__assets_delete"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CollectionDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_delete_collection_assets_collections__collection_id__assets_delete":{"properties":{"asset_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"The asset ids","description":"The ids of the assets to remove from the collection"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["asset_ids"],"title":"Body_delete_collection_assets_collections__collection_id__assets_delete"},"CollectionDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"created_by":{"anyOf":[{"$ref":"#/components/schemas/UserDTOBase"},{"type":"null"}]},"is_public_enabled":{"type":"boolean","title":"Is Public Enabled"},"allowed_actions":{"items":{"$ref":"#/components/schemas/Action"},"type":"array","title":"Allowed Actions"},"invite_id":{"type":"string","format":"uuid","title":"Invite Id"},"settings":{"$ref":"#/components/schemas/CollectionSettings-Output"},"icon_type":{"$ref":"#/components/schemas/DriveIconType"},"icon":{"type":"string","title":"Icon"},"icon_attachment":{"anyOf":[{"$ref":"#/components/schemas/AttachmentToDownloadDTO"},{"type":"null"}]},"background_image":{"type":"string","title":"Background Image"},"background_image_attachment":{"anyOf":[{"$ref":"#/components/schemas/AttachmentToDownloadDTO"},{"type":"null"}]},"preview_image":{"anyOf":[{"$ref":"#/components/schemas/PreviewDTO"},{"type":"null"}]},"is_expired":{"type":"boolean","title":"Is Expired","default":false},"password_protected":{"type":"boolean","title":"Password Protected"},"expiration_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expiration Date"}},"type":"object","required":["id","name","description","drive_id","created_by","is_public_enabled","allowed_actions","invite_id","settings","icon_type","icon","background_image","password_protected"],"title":"CollectionDTO"},"UserDTOBase":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"}},"type":"object","required":["id","name","email","avatar_url","user_type"],"title":"UserDTOBase"},"UserType":{"type":"string","enum":["regular","group"],"title":"UserType"},"Action":{"type":"string","enum":["manage","edit","share","comment","edit_metadata","download","read","read_asset_details","read_metadata","manage_webhooks","manage_drive","view_stack_versions"],"title":"Action"},"CollectionSettings-Output":{"properties":{"card_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Card Size"},"thumbnail_view":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail View"},"view":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"View"},"metadata_attribute_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Metadata Attribute Ids"},"sort":{"anyOf":[{"$ref":"#/components/schemas/CollectionSettingSort"},{"type":"null"}]}},"type":"object","title":"CollectionSettings"},"CollectionSettingSort":{"properties":{"attribute":{"type":"string","title":"Attribute"},"direction":{"anyOf":[{"$ref":"#/components/schemas/CollectionSettingSortDirection"},{"type":"null"}]}},"type":"object","required":["attribute"],"title":"CollectionSettingSort"},"CollectionSettingSortDirection":{"type":"string","enum":["ASC","DESC","CUSTOM"],"title":"CollectionSettingSortDirection"},"DriveIconType":{"type":"string","enum":["color","emoji","attachment"],"title":"DriveIconType"},"AttachmentToDownloadDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"uploader_id":{"type":"string","format":"uuid","title":"Uploader Id"},"uploaded":{"type":"boolean","title":"Uploaded"},"name":{"type":"string","title":"Name"},"mime_type":{"type":"string","title":"Mime Type"},"size":{"type":"integer","title":"Size"},"download_url":{"type":"string","title":"Download Url"}},"type":"object","required":["id","drive_id","uploader_id","uploaded","name","mime_type","size","download_url"],"title":"AttachmentToDownloadDTO"},"PreviewDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"frame":{"type":"integer","title":"Frame"},"signed_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Url"}},"type":"object","required":["id","frame"],"title":"PreviewDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Move an asset to a new position in the collection

> Move a single asset to a new position in the collection.\
> Only updates the assets affected by the move.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/collections/{collection_id}/assets/order":{"post":{"tags":["collections"],"summary":"Move an asset to a new position in the collection","description":"Move a single asset to a new position in the collection.\nOnly updates the assets affected by the move.","operationId":"update_collection_asset_order_collections__collection_id__assets_order_post","parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The collection id","description":"The id of the collection whose asset order will be updated"},"description":"The id of the collection whose asset order will be updated"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_update_collection_asset_order_collections__collection_id__assets_order_post"}}}},"responses":{"200":{"description":"Success status","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_update_collection_asset_order_collections__collection_id__assets_order_post":{"properties":{"asset_id":{"type":"string","format":"uuid","title":"The asset id","description":"The id of the asset to move"},"new_order":{"type":"integer","title":"The new position","description":"The new position for the asset (1-indexed)"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["asset_id","new_order"],"title":"Body_update_collection_asset_order_collections__collection_id__assets_order_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get directory paths from a collection

> Get the directory paths from a collection

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/collections/{collection_id}/directories":{"get":{"tags":["collections"],"summary":"Get directory paths from a collection","description":"Get the directory paths from a collection","operationId":"get_directories_from_collection_collections__collection_id__directories_get","parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The collection id","description":"The id of the collection to get directory paths from"},"description":"The id of the collection to get directory paths from"},{"name":"query","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query","description":"Optional query to filter directory paths"},"description":"Optional query to filter directory paths"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_directories_from_collection_collections__collection_id__directories_get"}}}},"responses":{"200":{"description":"The directory paths included in the collection","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"},"title":"Response Get Directories From Collection Collections  Collection Id  Directories Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_directories_from_collection_collections__collection_id__directories_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_directories_from_collection_collections__collection_id__directories_get"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Add directory paths to a collection

> Add directory paths to a collection.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/collections/{collection_id}/directories":{"post":{"tags":["collections"],"summary":"Add directory paths to a collection","description":"Add directory paths to a collection.","operationId":"add_directories_to_collection_route_collections__collection_id__directories_post","parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The collection id","description":"The id of the collection to add directory paths to"},"description":"The id of the collection to add directory paths to"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_add_directories_to_collection_route_collections__collection_id__directories_post"}}}},"responses":{"200":{"description":"The updated collection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CollectionDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_add_directories_to_collection_route_collections__collection_id__directories_post":{"properties":{"directory_paths":{"items":{"type":"string"},"type":"array","title":"The directory paths to add to the collection","description":"The paths of the directories to add to the collection"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["directory_paths"],"title":"Body_add_directories_to_collection_route_collections__collection_id__directories_post"},"CollectionDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"created_by":{"anyOf":[{"$ref":"#/components/schemas/UserDTOBase"},{"type":"null"}]},"is_public_enabled":{"type":"boolean","title":"Is Public Enabled"},"allowed_actions":{"items":{"$ref":"#/components/schemas/Action"},"type":"array","title":"Allowed Actions"},"invite_id":{"type":"string","format":"uuid","title":"Invite Id"},"settings":{"$ref":"#/components/schemas/CollectionSettings-Output"},"icon_type":{"$ref":"#/components/schemas/DriveIconType"},"icon":{"type":"string","title":"Icon"},"icon_attachment":{"anyOf":[{"$ref":"#/components/schemas/AttachmentToDownloadDTO"},{"type":"null"}]},"background_image":{"type":"string","title":"Background Image"},"background_image_attachment":{"anyOf":[{"$ref":"#/components/schemas/AttachmentToDownloadDTO"},{"type":"null"}]},"preview_image":{"anyOf":[{"$ref":"#/components/schemas/PreviewDTO"},{"type":"null"}]},"is_expired":{"type":"boolean","title":"Is Expired","default":false},"password_protected":{"type":"boolean","title":"Password Protected"},"expiration_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expiration Date"}},"type":"object","required":["id","name","description","drive_id","created_by","is_public_enabled","allowed_actions","invite_id","settings","icon_type","icon","background_image","password_protected"],"title":"CollectionDTO"},"UserDTOBase":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"}},"type":"object","required":["id","name","email","avatar_url","user_type"],"title":"UserDTOBase"},"UserType":{"type":"string","enum":["regular","group"],"title":"UserType"},"Action":{"type":"string","enum":["manage","edit","share","comment","edit_metadata","download","read","read_asset_details","read_metadata","manage_webhooks","manage_drive","view_stack_versions"],"title":"Action"},"CollectionSettings-Output":{"properties":{"card_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Card Size"},"thumbnail_view":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail View"},"view":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"View"},"metadata_attribute_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Metadata Attribute Ids"},"sort":{"anyOf":[{"$ref":"#/components/schemas/CollectionSettingSort"},{"type":"null"}]}},"type":"object","title":"CollectionSettings"},"CollectionSettingSort":{"properties":{"attribute":{"type":"string","title":"Attribute"},"direction":{"anyOf":[{"$ref":"#/components/schemas/CollectionSettingSortDirection"},{"type":"null"}]}},"type":"object","required":["attribute"],"title":"CollectionSettingSort"},"CollectionSettingSortDirection":{"type":"string","enum":["ASC","DESC","CUSTOM"],"title":"CollectionSettingSortDirection"},"DriveIconType":{"type":"string","enum":["color","emoji","attachment"],"title":"DriveIconType"},"AttachmentToDownloadDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"uploader_id":{"type":"string","format":"uuid","title":"Uploader Id"},"uploaded":{"type":"boolean","title":"Uploaded"},"name":{"type":"string","title":"Name"},"mime_type":{"type":"string","title":"Mime Type"},"size":{"type":"integer","title":"Size"},"download_url":{"type":"string","title":"Download Url"}},"type":"object","required":["id","drive_id","uploader_id","uploaded","name","mime_type","size","download_url"],"title":"AttachmentToDownloadDTO"},"PreviewDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"frame":{"type":"integer","title":"Frame"},"signed_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Url"}},"type":"object","required":["id","frame"],"title":"PreviewDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Remove directory paths from a collection

> Remove directory paths from a collection

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/collections/{collection_id}/directories":{"delete":{"tags":["collections"],"summary":"Remove directory paths from a collection","description":"Remove directory paths from a collection","operationId":"delete_collection_directories_collections__collection_id__directories_delete","parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The collection id","description":"The id of the collection to remove directory paths from"},"description":"The id of the collection to remove directory paths from"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_delete_collection_directories_collections__collection_id__directories_delete"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CollectionDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_delete_collection_directories_collections__collection_id__directories_delete":{"properties":{"directory_paths":{"items":{"type":"string"},"type":"array","title":"The directory paths","description":"The paths of the directories to remove from the collection"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["directory_paths"],"title":"Body_delete_collection_directories_collections__collection_id__directories_delete"},"CollectionDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"created_by":{"anyOf":[{"$ref":"#/components/schemas/UserDTOBase"},{"type":"null"}]},"is_public_enabled":{"type":"boolean","title":"Is Public Enabled"},"allowed_actions":{"items":{"$ref":"#/components/schemas/Action"},"type":"array","title":"Allowed Actions"},"invite_id":{"type":"string","format":"uuid","title":"Invite Id"},"settings":{"$ref":"#/components/schemas/CollectionSettings-Output"},"icon_type":{"$ref":"#/components/schemas/DriveIconType"},"icon":{"type":"string","title":"Icon"},"icon_attachment":{"anyOf":[{"$ref":"#/components/schemas/AttachmentToDownloadDTO"},{"type":"null"}]},"background_image":{"type":"string","title":"Background Image"},"background_image_attachment":{"anyOf":[{"$ref":"#/components/schemas/AttachmentToDownloadDTO"},{"type":"null"}]},"preview_image":{"anyOf":[{"$ref":"#/components/schemas/PreviewDTO"},{"type":"null"}]},"is_expired":{"type":"boolean","title":"Is Expired","default":false},"password_protected":{"type":"boolean","title":"Password Protected"},"expiration_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expiration Date"}},"type":"object","required":["id","name","description","drive_id","created_by","is_public_enabled","allowed_actions","invite_id","settings","icon_type","icon","background_image","password_protected"],"title":"CollectionDTO"},"UserDTOBase":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"}},"type":"object","required":["id","name","email","avatar_url","user_type"],"title":"UserDTOBase"},"UserType":{"type":"string","enum":["regular","group"],"title":"UserType"},"Action":{"type":"string","enum":["manage","edit","share","comment","edit_metadata","download","read","read_asset_details","read_metadata","manage_webhooks","manage_drive","view_stack_versions"],"title":"Action"},"CollectionSettings-Output":{"properties":{"card_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Card Size"},"thumbnail_view":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail View"},"view":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"View"},"metadata_attribute_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Metadata Attribute Ids"},"sort":{"anyOf":[{"$ref":"#/components/schemas/CollectionSettingSort"},{"type":"null"}]}},"type":"object","title":"CollectionSettings"},"CollectionSettingSort":{"properties":{"attribute":{"type":"string","title":"Attribute"},"direction":{"anyOf":[{"$ref":"#/components/schemas/CollectionSettingSortDirection"},{"type":"null"}]}},"type":"object","required":["attribute"],"title":"CollectionSettingSort"},"CollectionSettingSortDirection":{"type":"string","enum":["ASC","DESC","CUSTOM"],"title":"CollectionSettingSortDirection"},"DriveIconType":{"type":"string","enum":["color","emoji","attachment"],"title":"DriveIconType"},"AttachmentToDownloadDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"uploader_id":{"type":"string","format":"uuid","title":"Uploader Id"},"uploaded":{"type":"boolean","title":"Uploaded"},"name":{"type":"string","title":"Name"},"mime_type":{"type":"string","title":"Mime Type"},"size":{"type":"integer","title":"Size"},"download_url":{"type":"string","title":"Download Url"}},"type":"object","required":["id","drive_id","uploader_id","uploaded","name","mime_type","size","download_url"],"title":"AttachmentToDownloadDTO"},"PreviewDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"frame":{"type":"integer","title":"Frame"},"signed_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Url"}},"type":"object","required":["id","frame"],"title":"PreviewDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Start the upload process for a collection attachment

> Start the upload process for a collection attachment

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/collections/{collection_id}/attachments":{"post":{"tags":["collections"],"summary":"Start the upload process for a collection attachment","description":"Start the upload process for a collection attachment","operationId":"start_collection_attachment_upload_collections__collection_id__attachments_post","parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The collection id","description":"The id of the collection to create the attachment for"},"description":"The id of the collection to create the attachment for"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_start_collection_attachment_upload_collections__collection_id__attachments_post"}}}},"responses":{"200":{"description":"The id of the created user collection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachmentToUploadDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_start_collection_attachment_upload_collections__collection_id__attachments_post":{"properties":{"drive_id":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive to create the attachment for"},"name":{"type":"string","title":"The name of the attachment","description":"The name of the attachment to be created"},"mime_type":{"type":"string","title":"The mime type of the attachment","description":"The mime type of the attachment to be created"},"size":{"type":"integer","title":"The size of the attachment","description":"The size of the attachment to be created"},"upload_for":{"type":"string","enum":["icon","background"],"title":"What the upload is for","description":"What the upload is for ('icon' or 'background')"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["drive_id","name","mime_type","size","upload_for"],"title":"Body_start_collection_attachment_upload_collections__collection_id__attachments_post"},"AttachmentToUploadDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"uploader_id":{"type":"string","format":"uuid","title":"Uploader Id"},"uploaded":{"type":"boolean","title":"Uploaded"},"name":{"type":"string","title":"Name"},"mime_type":{"type":"string","title":"Mime Type"},"size":{"type":"integer","title":"Size"},"upload_url":{"type":"string","title":"Upload Url"}},"type":"object","required":["id","drive_id","uploader_id","uploaded","name","mime_type","size","upload_url"],"title":"AttachmentToUploadDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Mark the upload of a collection attachment as complete

> Mark the upload of a collection attachment as complete

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/collections/{collection_id}/attachments/{attachment_id}":{"post":{"tags":["collections"],"summary":"Mark the upload of a collection attachment as complete","description":"Mark the upload of a collection attachment as complete","operationId":"mark_collection_attachment_uploaded_collections__collection_id__attachments__attachment_id__post","parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The collection id","description":"The id of the collection to mark the attachment uploaded for"},"description":"The id of the collection to mark the attachment uploaded for"},{"name":"attachment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The attachment id","description":"The id of the attachment to mark as uploaded"},"description":"The id of the attachment to mark as uploaded"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_mark_collection_attachment_uploaded_collections__collection_id__attachments__attachment_id__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachmentToDownloadDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_mark_collection_attachment_uploaded_collections__collection_id__attachments__attachment_id__post":{"properties":{"drive_id":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive to mark the attachment uploaded for"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["drive_id"],"title":"Body_mark_collection_attachment_uploaded_collections__collection_id__attachments__attachment_id__post"},"AttachmentToDownloadDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"uploader_id":{"type":"string","format":"uuid","title":"Uploader Id"},"uploaded":{"type":"boolean","title":"Uploaded"},"name":{"type":"string","title":"Name"},"mime_type":{"type":"string","title":"Mime Type"},"size":{"type":"integer","title":"Size"},"download_url":{"type":"string","title":"Download Url"}},"type":"object","required":["id","drive_id","uploader_id","uploaded","name","mime_type","size","download_url"],"title":"AttachmentToDownloadDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```


# Workspaces

## Get the metadata attributes for a drive including system attributes

> Get the metadata attributes for a drive including system attributes

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/drives/{drive_id}/metadata":{"get":{"tags":["workspaces","drives","drives"],"summary":"Get the metadata attributes for a drive including system attributes","description":"Get the metadata attributes for a drive including system attributes","operationId":"get_drive_metadata_route_workspaces_drives__drive_id__metadata_get","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_drive_metadata_route_workspaces_drives__drive_id__metadata_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MetadataAttribute-Output"},"title":"Response Get Drive Metadata Route Workspaces Drives  Drive Id  Metadata Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_drive_metadata_route_workspaces_drives__drive_id__metadata_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_drive_metadata_route_workspaces_drives__drive_id__metadata_get"},"MetadataAttribute-Output":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"keys":{"items":{"type":"string"},"type":"array","title":"Keys"},"value_type":{"$ref":"#/components/schemas/MetadataAttributeType"},"description":{"type":"string","title":"Description"},"location":{"$ref":"#/components/schemas/MetadataAttributeLocation"},"default":{"anyOf":[{},{"type":"null"}],"title":"Default"},"group":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group"},"options":{"anyOf":[{"items":{"$ref":"#/components/schemas/MetadataAttributeSelectOption"},"type":"array"},{"type":"null"}],"title":"Options"},"add_new_options":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Add New Options","default":true},"restrict_to_types":{"anyOf":[{"items":{"$ref":"#/components/schemas/AssetType"},"type":"array"},{"type":"null"}],"title":"Restrict To Types"},"automated":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Automated","default":false},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt"},"archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Archived","default":false},"locked":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Locked","default":false}},"type":"object","required":["id","name","keys","value_type","description","location"],"title":"MetadataAttribute"},"MetadataAttributeType":{"type":"string","enum":["str","single_select","multi_select","float","int","bool","datetime","rating"],"title":"MetadataAttributeType"},"MetadataAttributeLocation":{"type":"string","enum":["system","custom","asset"],"title":"MetadataAttributeLocation"},"MetadataAttributeSelectOption":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"color":{"$ref":"#/components/schemas/MetadataAttributeSelectOptionColor"},"user":{"type":"boolean","title":"User"},"archived":{"type":"boolean","title":"Archived","default":false}},"type":"object","required":["id","name","color","user"],"title":"MetadataAttributeSelectOption"},"MetadataAttributeSelectOptionColor":{"type":"string","enum":["pink","red","yellow","light_green","dark_green","light_blue","dark_blue","purple"],"title":"MetadataAttributeSelectOptionColor"},"AssetType":{"type":"string","enum":["IMAGE","VIDEO","AUDIO","DOCUMENT","HDR","HDRI","PHOTOSHOP","ILLUSTRATOR","EXR","OBJECT","VECTOR","OTHER","MAYA","MAX","BLENDER","HOUDINI","UNREAL","UNITY","AFTER_EFFECTS","MOGRT"],"title":"AssetType"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## POST /workspaces/drives/{drive\_id}/metadata

> Add metadata attributes to a drive

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/drives/{drive_id}/metadata":{"post":{"tags":["workspaces","drives","drives"],"summary":"Add metadata attributes to a drive","operationId":"add_drive_metadata_workspaces_drives__drive_id__metadata_post","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_add_drive_metadata_workspaces_drives__drive_id__metadata_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetadataAttribute-Output"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_add_drive_metadata_workspaces_drives__drive_id__metadata_post":{"properties":{"metadata":{"$ref":"#/components/schemas/MetadataAttribute-Input","title":"The metadata attributes","description":"The metadata attributes to add to the drive"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["metadata"],"title":"Body_add_drive_metadata_workspaces_drives__drive_id__metadata_post"},"MetadataAttribute-Input":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"keys":{"items":{"type":"string"},"type":"array","title":"Keys"},"value_type":{"$ref":"#/components/schemas/MetadataAttributeType"},"description":{"type":"string","title":"Description"},"location":{"$ref":"#/components/schemas/MetadataAttributeLocation"},"default":{"anyOf":[{},{"type":"null"}],"title":"Default"},"group":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group"},"options":{"anyOf":[{"items":{"$ref":"#/components/schemas/MetadataAttributeSelectOption"},"type":"array"},{"type":"null"}],"title":"Options"},"add_new_options":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Add New Options","default":true},"restrict_to_types":{"anyOf":[{"items":{"$ref":"#/components/schemas/AssetType"},"type":"array"},{"type":"null"}],"title":"Restrict To Types"},"automated":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Automated","default":false},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt"},"archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Archived","default":false},"locked":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Locked","default":false}},"type":"object","required":["id","name","keys","value_type","description","location"],"title":"MetadataAttribute"},"MetadataAttributeType":{"type":"string","enum":["str","single_select","multi_select","float","int","bool","datetime","rating"],"title":"MetadataAttributeType"},"MetadataAttributeLocation":{"type":"string","enum":["system","custom","asset"],"title":"MetadataAttributeLocation"},"MetadataAttributeSelectOption":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"color":{"$ref":"#/components/schemas/MetadataAttributeSelectOptionColor"},"user":{"type":"boolean","title":"User"},"archived":{"type":"boolean","title":"Archived","default":false}},"type":"object","required":["id","name","color","user"],"title":"MetadataAttributeSelectOption"},"MetadataAttributeSelectOptionColor":{"type":"string","enum":["pink","red","yellow","light_green","dark_green","light_blue","dark_blue","purple"],"title":"MetadataAttributeSelectOptionColor"},"AssetType":{"type":"string","enum":["IMAGE","VIDEO","AUDIO","DOCUMENT","HDR","HDRI","PHOTOSHOP","ILLUSTRATOR","EXR","OBJECT","VECTOR","OTHER","MAYA","MAX","BLENDER","HOUDINI","UNREAL","UNITY","AFTER_EFFECTS","MOGRT"],"title":"AssetType"},"MetadataAttribute-Output":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"keys":{"items":{"type":"string"},"type":"array","title":"Keys"},"value_type":{"$ref":"#/components/schemas/MetadataAttributeType"},"description":{"type":"string","title":"Description"},"location":{"$ref":"#/components/schemas/MetadataAttributeLocation"},"default":{"anyOf":[{},{"type":"null"}],"title":"Default"},"group":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group"},"options":{"anyOf":[{"items":{"$ref":"#/components/schemas/MetadataAttributeSelectOption"},"type":"array"},{"type":"null"}],"title":"Options"},"add_new_options":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Add New Options","default":true},"restrict_to_types":{"anyOf":[{"items":{"$ref":"#/components/schemas/AssetType"},"type":"array"},{"type":"null"}],"title":"Restrict To Types"},"automated":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Automated","default":false},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt"},"archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Archived","default":false},"locked":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Locked","default":false}},"type":"object","required":["id","name","keys","value_type","description","location"],"title":"MetadataAttribute"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## POST /workspaces/drives/{drive\_id}/metadata/{metadata\_id}

> Archive metadata attribute on a drive

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/drives/{drive_id}/metadata/{metadata_id}":{"post":{"tags":["workspaces","drives","drives"],"summary":"Archive metadata attribute on a drive","operationId":"archive_metadata_attribute_workspaces_drives__drive_id__metadata__metadata_id__post","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}},{"name":"metadata_id","in":"path","required":true,"schema":{"type":"string","title":"The metadata id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_archive_metadata_attribute_workspaces_drives__drive_id__metadata__metadata_id__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_archive_metadata_attribute_workspaces_drives__drive_id__metadata__metadata_id__post":{"properties":{"archive":{"type":"boolean","title":"Archive metadata attribute or not","description":"Archive metadata attribute or not"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["archive"],"title":"Body_archive_metadata_attribute_workspaces_drives__drive_id__metadata__metadata_id__post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## PUT /workspaces/drives/{drive\_id}/metadata/{metadata\_id}

> Update a metadata attribute on a drive

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/drives/{drive_id}/metadata/{metadata_id}":{"put":{"tags":["workspaces","drives","drives"],"summary":"Update a metadata attribute on a drive","operationId":"update_metadata_attribute_workspaces_drives__drive_id__metadata__metadata_id__put","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}},{"name":"metadata_id","in":"path","required":true,"schema":{"type":"string","title":"The metadata id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_update_metadata_attribute_workspaces_drives__drive_id__metadata__metadata_id__put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetadataAttribute-Output"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_update_metadata_attribute_workspaces_drives__drive_id__metadata__metadata_id__put":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The metadata name","description":"The metadata name to update"},"automated":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"The metadata automated","description":"The metadata automated to update"},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The metadata prompt","description":"The metadata prompt to update"},"default":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The metadata default","description":"The metadata default to update"},"add_new_options":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Add new options","description":"Whether or not we're allowed to add new options"},"options":{"anyOf":[{"items":{"$ref":"#/components/schemas/MetadataAttributeSelectOption"},"type":"array"},{"type":"null"}],"title":"The metadata options","description":"The metadata options to update"},"rerun":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Rerun AI","description":"Whether or not to rerun the AI on all cells including existing ones","default":false},"locked":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Locked","description":"Whether or not the metadata attribute is locked to managers only"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_update_metadata_attribute_workspaces_drives__drive_id__metadata__metadata_id__put"},"MetadataAttributeSelectOption":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"color":{"$ref":"#/components/schemas/MetadataAttributeSelectOptionColor"},"user":{"type":"boolean","title":"User"},"archived":{"type":"boolean","title":"Archived","default":false}},"type":"object","required":["id","name","color","user"],"title":"MetadataAttributeSelectOption"},"MetadataAttributeSelectOptionColor":{"type":"string","enum":["pink","red","yellow","light_green","dark_green","light_blue","dark_blue","purple"],"title":"MetadataAttributeSelectOptionColor"},"MetadataAttribute-Output":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"keys":{"items":{"type":"string"},"type":"array","title":"Keys"},"value_type":{"$ref":"#/components/schemas/MetadataAttributeType"},"description":{"type":"string","title":"Description"},"location":{"$ref":"#/components/schemas/MetadataAttributeLocation"},"default":{"anyOf":[{},{"type":"null"}],"title":"Default"},"group":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group"},"options":{"anyOf":[{"items":{"$ref":"#/components/schemas/MetadataAttributeSelectOption"},"type":"array"},{"type":"null"}],"title":"Options"},"add_new_options":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Add New Options","default":true},"restrict_to_types":{"anyOf":[{"items":{"$ref":"#/components/schemas/AssetType"},"type":"array"},{"type":"null"}],"title":"Restrict To Types"},"automated":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Automated","default":false},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt"},"archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Archived","default":false},"locked":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Locked","default":false}},"type":"object","required":["id","name","keys","value_type","description","location"],"title":"MetadataAttribute"},"MetadataAttributeType":{"type":"string","enum":["str","single_select","multi_select","float","int","bool","datetime","rating"],"title":"MetadataAttributeType"},"MetadataAttributeLocation":{"type":"string","enum":["system","custom","asset"],"title":"MetadataAttributeLocation"},"AssetType":{"type":"string","enum":["IMAGE","VIDEO","AUDIO","DOCUMENT","HDR","HDRI","PHOTOSHOP","ILLUSTRATOR","EXR","OBJECT","VECTOR","OTHER","MAYA","MAX","BLENDER","HOUDINI","UNREAL","UNITY","AFTER_EFFECTS","MOGRT"],"title":"AssetType"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## POST /workspaces/drives/{drive\_id}/metadata/{metadata\_id}/option

> Create a metadata attribute option on a drive

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/drives/{drive_id}/metadata/{metadata_id}/option":{"post":{"tags":["workspaces","drives","drives"],"summary":"Create a metadata attribute option on a drive","operationId":"create_metadata_attribute_option_workspaces_drives__drive_id__metadata__metadata_id__option_post","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}},{"name":"metadata_id","in":"path","required":true,"schema":{"type":"string","title":"The metadata id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_create_metadata_attribute_option_workspaces_drives__drive_id__metadata__metadata_id__option_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetadataAttributeSelectOption"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_create_metadata_attribute_option_workspaces_drives__drive_id__metadata__metadata_id__option_post":{"properties":{"option_name":{"type":"string","title":"The option name","description":"The option name to add to the metadata attribute"},"option_color":{"$ref":"#/components/schemas/MetadataAttributeSelectOptionColor","title":"The option color","description":"The option color to add to the metadata attribute"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["option_name","option_color"],"title":"Body_create_metadata_attribute_option_workspaces_drives__drive_id__metadata__metadata_id__option_post"},"MetadataAttributeSelectOptionColor":{"type":"string","enum":["pink","red","yellow","light_green","dark_green","light_blue","dark_blue","purple"],"title":"MetadataAttributeSelectOptionColor"},"MetadataAttributeSelectOption":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"color":{"$ref":"#/components/schemas/MetadataAttributeSelectOptionColor"},"user":{"type":"boolean","title":"User"},"archived":{"type":"boolean","title":"Archived","default":false}},"type":"object","required":["id","name","color","user"],"title":"MetadataAttributeSelectOption"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Shares a file (or folder) w user

> Share a file on a workspace.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/drives/{drive_id}/share-file":{"post":{"tags":["workspaces","drives"],"summary":"Shares a file (or folder) w user","description":"Share a file on a workspace.","operationId":"share_file_workspaces_drives__drive_id__share_file_post","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_share_file_workspaces_drives__drive_id__share_file_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Share File Workspaces Drives  Drive Id  Share File Post"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_share_file_workspaces_drives__drive_id__share_file_post":{"properties":{"path":{"type":"string","format":"path","title":"The directory path","description":"The directory path of the file to share"},"invites":{"items":{"$ref":"#/components/schemas/PathInvite"},"type":"array","title":"The workspace invitations","description":"A combination of email and role for the user to invite to the workspace"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The url","description":"The url of the file"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The message","description":"The message to send to the invited users","default":""},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["path","invites"],"title":"Body_share_file_workspaces_drives__drive_id__share_file_post"},"PathInvite":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"role":{"$ref":"#/components/schemas/DriveRole"}},"type":"object","required":["email","role"],"title":"PathInvite"},"DriveRole":{"type":"integer","enum":[50,40,30,20,17,15,10,0],"title":"DriveRole"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get all files shared with a user

> Get all files shared with a user on a drive

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/drives/{drive_id}/shared":{"get":{"tags":["workspaces","drives"],"summary":"Get all files shared with a user","description":"Get all files shared with a user on a drive","operationId":"get_files_shared_with_user_on_drive_workspaces_drives__drive_id__shared_get","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_files_shared_with_user_on_drive_workspaces_drives__drive_id__shared_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserSharesDTO"},"title":"Response Get Files Shared With User On Drive Workspaces Drives  Drive Id  Shared Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_files_shared_with_user_on_drive_workspaces_drives__drive_id__shared_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_files_shared_with_user_on_drive_workspaces_drives__drive_id__shared_get"},"UserSharesDTO":{"properties":{"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"drive_identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Drive Identifier"},"id":{"type":"string","format":"uuid","title":"Id"},"asset":{"anyOf":[{"$ref":"#/components/schemas/AssetDTO"},{"type":"null"}]},"path":{"type":"string","title":"Path"},"role":{"type":"integer","title":"Role"},"actions":{"items":{"$ref":"#/components/schemas/Action"},"type":"array","title":"Actions"}},"type":"object","required":["drive_id","id","path","role","actions"],"title":"UserSharesDTO"},"AssetDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"path":{"type":"string","title":"Path"},"name":{"type":"string","title":"Name"},"extension":{"type":"string","title":"Extension"},"updated":{"type":"string","format":"date-time","title":"Updated"},"created":{"type":"string","format":"date-time","title":"Created"},"type":{"$ref":"#/components/schemas/AssetType"},"size_bytes":{"type":"integer","title":"Size Bytes"},"stack_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Stack Id"},"stack_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stack Number"},"is_fs_draft_blob":{"type":"boolean","title":"Is Fs Draft Blob"},"is_fs_null_blob":{"type":"boolean","title":"Is Fs Null Blob"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"ai_indexed":{"type":"boolean","title":"Ai Indexed"},"system_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"System Metadata","default":{}},"custom_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Custom Metadata","default":{}},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"palette":{"items":{"items":{"type":"integer"},"type":"array"},"type":"array","title":"Palette"},"ocr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ocr"},"transcription_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Transcription Id"},"faces_present":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Faces Present"},"content_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Content Length"},"preview_job_state":{"$ref":"#/components/schemas/JobState"},"metadata_job_state":{"$ref":"#/components/schemas/JobState"},"core_vision_job_state":{"$ref":"#/components/schemas/JobState"},"color_palette_job_state":{"$ref":"#/components/schemas/JobState"},"core_audio_job_state":{"$ref":"#/components/schemas/JobState"},"audio_job_state":{"$ref":"#/components/schemas/JobState"},"facial_recognition_job_state":{"$ref":"#/components/schemas/JobState"},"proxy_job_state":{"$ref":"#/components/schemas/JobState"},"audio_proxy_job_state":{"$ref":"#/components/schemas/JobState"},"transcription_job_state":{"$ref":"#/components/schemas/JobState"},"objects":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Objects"},"texture_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Texture Data"},"integration_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Integration Data"},"preview_images":{"items":{"$ref":"#/components/schemas/PreviewDTO"},"type":"array","title":"Preview Images"},"custom_thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}]},"proxy":{"anyOf":[{"$ref":"#/components/schemas/ProxyDTO"},{"type":"null"}]},"audio_proxy":{"anyOf":[{"$ref":"#/components/schemas/ProxyDTO"},{"type":"null"}]}},"type":"object","required":["id","drive_id","path","name","extension","updated","created","type","size_bytes","is_fs_draft_blob","is_fs_null_blob","ai_indexed","palette","preview_job_state","metadata_job_state","core_vision_job_state","color_palette_job_state","core_audio_job_state","facial_recognition_job_state","proxy_job_state","audio_proxy_job_state","transcription_job_state","preview_images"],"title":"AssetDTO","description":"Full asset DTO with relationship fields that require eager loading."},"AssetType":{"type":"string","enum":["IMAGE","VIDEO","AUDIO","DOCUMENT","HDR","HDRI","PHOTOSHOP","ILLUSTRATOR","EXR","OBJECT","VECTOR","OTHER","MAYA","MAX","BLENDER","HOUDINI","UNREAL","UNITY","AFTER_EFFECTS","MOGRT"],"title":"AssetType"},"JobState":{"type":"string","enum":["NOT_STARTED","IN_PROGRESS","COMPLETED","FAILED","INSUFFICIENT_CREDITS"],"title":"JobState","description":"Enum for asset job states"},"PreviewDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"frame":{"type":"integer","title":"Frame"},"signed_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Url"}},"type":"object","required":["id","frame"],"title":"PreviewDTO"},"ProxyDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"}},"type":"object","required":["id"],"title":"ProxyDTO"},"Action":{"type":"string","enum":["manage","edit","share","comment","edit_metadata","download","read","read_asset_details","read_metadata","manage_webhooks","manage_drive","view_stack_versions"],"title":"Action"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## DELETE /workspaces/drives/{drive\_id}/shared/{user\_id}/path

> Removes a share from a path

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/drives/{drive_id}/shared/{user_id}/path":{"delete":{"tags":["workspaces","drives"],"summary":"Removes a share from a path","operationId":"remove_share_workspaces_drives__drive_id__shared__user_id__path_delete","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The user id to remove from path"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_remove_share_workspaces_drives__drive_id__shared__user_id__path_delete"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"boolean","title":"Response Remove Share Workspaces Drives  Drive Id  Shared  User Id  Path Delete"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_remove_share_workspaces_drives__drive_id__shared__user_id__path_delete":{"properties":{"path":{"type":"string","format":"path","title":"The directory path","description":"The directory path to list items"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["path"],"title":"Body_remove_share_workspaces_drives__drive_id__shared__user_id__path_delete"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## PUT /workspaces/drives/{drive\_id}/users/{user\_id}/path

> Updates people's permissions on a path

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/drives/{drive_id}/users/{user_id}/path":{"put":{"tags":["workspaces","drives"],"summary":"Updates people's permissions on a path","operationId":"update_path_permissions_workspaces_drives__drive_id__users__user_id__path_put","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The user id to update"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_update_path_permissions_workspaces_drives__drive_id__users__user_id__path_put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_update_path_permissions_workspaces_drives__drive_id__users__user_id__path_put":{"properties":{"role":{"$ref":"#/components/schemas/DriveRole","title":"The role to update"},"path":{"type":"string","format":"path","title":"The path to change permissions"},"upsert":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"If the user hasn't been shared the file, share it","default":false},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["role","path"],"title":"Body_update_path_permissions_workspaces_drives__drive_id__users__user_id__path_put"},"DriveRole":{"type":"integer","enum":[50,40,30,20,17,15,10,0],"title":"DriveRole"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## GET /workspaces/drives/{drive\_id}/file-users

> Lists all the user for a specific path (file or folder).

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/drives/{drive_id}/file-users":{"get":{"tags":["workspaces","drives"],"summary":"Lists all the user for a specific path (file or folder).","operationId":"list_path_users_workspaces_drives__drive_id__file_users_get","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}},{"name":"path","in":"query","required":true,"schema":{"type":"string","title":"The directory path","format":"path"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_list_path_users_workspaces_drives__drive_id__file_users_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileUsersDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_list_path_users_workspaces_drives__drive_id__file_users_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_list_path_users_workspaces_drives__drive_id__file_users_get"},"FileUsersDTO":{"properties":{"invited":{"items":{"$ref":"#/components/schemas/UserRoleViaAndMembershipDTO"},"type":"array","title":"Invited"},"not_invited":{"items":{"$ref":"#/components/schemas/FileGuestDTO"},"type":"array","title":"Not Invited"}},"type":"object","required":["invited","not_invited"],"title":"FileUsersDTO"},"UserRoleViaAndMembershipDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"},"role":{"$ref":"#/components/schemas/DriveRole"},"via":{"$ref":"#/components/schemas/ViaType"},"is_contractor":{"type":"boolean","title":"Is Contractor","default":false},"is_workspace_member":{"type":"boolean","title":"Is Workspace Member","default":false},"is_inheriting_as_workspace_member":{"type":"boolean","title":"Is Inheriting As Workspace Member","default":false},"is_pending":{"type":"boolean","title":"Is Pending","default":false}},"type":"object","required":["id","name","email","avatar_url","user_type","role","via"],"title":"UserRoleViaAndMembershipDTO"},"UserType":{"type":"string","enum":["regular","group"],"title":"UserType"},"DriveRole":{"type":"integer","enum":[50,40,30,20,17,15,10,0],"title":"DriveRole"},"ViaType":{"type":"string","enum":["workspace","drive","folder","direct"],"title":"ViaType"},"FileGuestDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"},"role":{"$ref":"#/components/schemas/DriveRole"}},"type":"object","required":["id","name","email","avatar_url","user_type","role"],"title":"FileGuestDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get your role + actions you can do on a folder (or file if you pass a path)

> Get your role + actions you can do on a file (asset).\
> No need to auth these bc you are checking your role and would get none if you don't have auth.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/drives/{drive_id}/folder-permissions":{"get":{"tags":["workspaces","drives"],"summary":"Get your role + actions you can do on a folder (or file if you pass a path)","description":"Get your role + actions you can do on a file (asset).\nNo need to auth these bc you are checking your role and would get none if you don't have auth.","operationId":"get_folder_allowed_actions_workspaces_drives__drive_id__folder_permissions_get","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The Drive id"}},{"name":"path","in":"query","required":true,"schema":{"type":"string","title":"The directory path","description":"The directory path to list items","format":"path"},"description":"The directory path to list items"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_folder_allowed_actions_workspaces_drives__drive_id__folder_permissions_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/UserRoleAndActionsDTO"},{"type":"null"}],"title":"Response Get Folder Allowed Actions Workspaces Drives  Drive Id  Folder Permissions Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_folder_allowed_actions_workspaces_drives__drive_id__folder_permissions_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_folder_allowed_actions_workspaces_drives__drive_id__folder_permissions_get"},"UserRoleAndActionsDTO":{"properties":{"role":{"anyOf":[{"$ref":"#/components/schemas/DriveRole"},{"type":"null"}]},"actions":{"items":{"$ref":"#/components/schemas/Action"},"type":"array","title":"Actions"},"via":{"anyOf":[{"$ref":"#/components/schemas/ViaType"},{"type":"null"}]}},"type":"object","required":["role","actions","via"],"title":"UserRoleAndActionsDTO"},"DriveRole":{"type":"integer","enum":[50,40,30,20,17,15,10,0],"title":"DriveRole"},"Action":{"type":"string","enum":["manage","edit","share","comment","edit_metadata","download","read","read_asset_details","read_metadata","manage_webhooks","manage_drive","view_stack_versions"],"title":"Action"},"ViaType":{"type":"string","enum":["workspace","drive","folder","direct"],"title":"ViaType"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get your role + actions you can do on an asset

> Get your role + actions you can do on a file (asset).\
> No need to auth these bc you are checking your role and would get none if you don't have auth.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/drives/{drive_id}/file-permissions":{"get":{"tags":["workspaces","drives"],"summary":"Get your role + actions you can do on an asset","description":"Get your role + actions you can do on a file (asset).\nNo need to auth these bc you are checking your role and would get none if you don't have auth.","operationId":"get_file_allowed_actions_workspaces_drives__drive_id__file_permissions_get","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The Drive id"}},{"name":"asset_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The id of the file (asset id)","description":"The id of the file (asset id)"},"description":"The id of the file (asset id)"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_file_allowed_actions_workspaces_drives__drive_id__file_permissions_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/UserRoleAndActionsDTO"},{"type":"null"}],"title":"Response Get File Allowed Actions Workspaces Drives  Drive Id  File Permissions Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_file_allowed_actions_workspaces_drives__drive_id__file_permissions_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_file_allowed_actions_workspaces_drives__drive_id__file_permissions_get"},"UserRoleAndActionsDTO":{"properties":{"role":{"anyOf":[{"$ref":"#/components/schemas/DriveRole"},{"type":"null"}]},"actions":{"items":{"$ref":"#/components/schemas/Action"},"type":"array","title":"Actions"},"via":{"anyOf":[{"$ref":"#/components/schemas/ViaType"},{"type":"null"}]}},"type":"object","required":["role","actions","via"],"title":"UserRoleAndActionsDTO"},"DriveRole":{"type":"integer","enum":[50,40,30,20,17,15,10,0],"title":"DriveRole"},"Action":{"type":"string","enum":["manage","edit","share","comment","edit_metadata","download","read","read_asset_details","read_metadata","manage_webhooks","manage_drive","view_stack_versions"],"title":"Action"},"ViaType":{"type":"string","enum":["workspace","drive","folder","direct"],"title":"ViaType"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Authorize path

> Check whether a user is authed on a path in a drive.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/drives/{drive_id}/authorize":{"get":{"tags":["workspaces","drives"],"summary":"Authorize path","description":"Check whether a user is authed on a path in a drive.","operationId":"auth_path_route_workspaces_drives__drive_id__authorize_get","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}},{"name":"path","in":"query","required":true,"schema":{"type":"string","title":"The directory path","description":"The directory path to authorize","format":"path"},"description":"The directory path to authorize"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_auth_path_route_workspaces_drives__drive_id__authorize_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"boolean","title":"Response Auth Path Route Workspaces Drives  Drive Id  Authorize Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_auth_path_route_workspaces_drives__drive_id__authorize_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_auth_path_route_workspaces_drives__drive_id__authorize_get"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Lists all the paths for a specific workspace

> For drive and workspace users, list their access and paths.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/drives/{drive_id}/user-paths":{"get":{"tags":["workspaces","drives"],"summary":"Lists all the paths for a specific workspace","description":"For drive and workspace users, list their access and paths.","operationId":"list_user_path_access_drives_workspaces_drives__drive_id__user_paths_get","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DrivePath"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"DrivePath":{"properties":{"drive":{"$ref":"#/components/schemas/DriveDTO"},"paths":{"items":{"$ref":"#/components/schemas/PathAccess"},"type":"array","title":"Paths"}},"type":"object","required":["drive","paths"],"title":"DrivePath"},"DriveDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"icon":{"type":"string","title":"Icon"},"settings":{"$ref":"#/components/schemas/DriveSettings"},"type":{"$ref":"#/components/schemas/DriveType"},"identifier":{"type":"string","title":"Identifier"},"icon_type":{"$ref":"#/components/schemas/DriveIconType"},"member_inherited_role":{"$ref":"#/components/schemas/DriveRole"},"invite_id":{"type":"string","format":"uuid","title":"Invite Id"},"workspace_id":{"type":"string","format":"uuid","title":"Workspace Id"},"byos":{"anyOf":[{"$ref":"#/components/schemas/DriveByosData"},{"type":"null"}]},"default_storage_backend":{"anyOf":[{"$ref":"#/components/schemas/DriveDefaultStorageBackend"},{"type":"null"}]}},"type":"object","required":["id","name","description","icon","settings","type","identifier","icon_type","member_inherited_role","invite_id","workspace_id","byos","default_storage_backend"],"title":"DriveDTO"},"DriveSettings":{"properties":{"max_storage_bytes":{"type":"integer","title":"Max Storage Bytes"},"mount_path_macos":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Macos"},"mount_path_linux":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Linux"},"mount_path_windows":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Windows"}},"type":"object","required":["max_storage_bytes"],"title":"DriveSettings"},"DriveType":{"type":"string","enum":["catalog","magic","vault"],"title":"DriveType"},"DriveIconType":{"type":"string","enum":["color","emoji","attachment"],"title":"DriveIconType"},"DriveRole":{"type":"integer","enum":[50,40,30,20,17,15,10,0],"title":"DriveRole"},"DriveByosData":{"properties":{"bucket":{"type":"string","title":"Bucket"},"endpoint":{"type":"string","title":"Endpoint"}},"type":"object","required":["bucket","endpoint"],"title":"DriveByosData"},"DriveDefaultStorageBackend":{"properties":{"provider":{"type":"string","title":"Provider"},"bucket":{"type":"string","title":"Bucket"}},"type":"object","required":["provider","bucket"],"title":"DriveDefaultStorageBackend"},"PathAccess":{"properties":{"user_id":{"type":"string","format":"uuid","title":"User Id"},"user_name":{"type":"string","title":"User Name"},"path":{"type":"string","title":"Path"},"role":{"$ref":"#/components/schemas/DriveRole"}},"type":"object","required":["user_id","user_name","path","role"],"title":"PathAccess"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Lists all the paths for a user in a specific drive

> Lists all the paths for a specific user on a drive

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/drives/{drive_id}/user-paths/{user_id}":{"get":{"tags":["workspaces","drives"],"summary":"Lists all the paths for a user in a specific drive","description":"Lists all the paths for a specific user on a drive","operationId":"list_user_path_access_on_drive_workspaces_drives__drive_id__user_paths__user_id__get","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The user id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_list_user_path_access_on_drive_workspaces_drives__drive_id__user_paths__user_id__get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DrivePath"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_list_user_path_access_on_drive_workspaces_drives__drive_id__user_paths__user_id__get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_list_user_path_access_on_drive_workspaces_drives__drive_id__user_paths__user_id__get"},"DrivePath":{"properties":{"drive":{"$ref":"#/components/schemas/DriveDTO"},"paths":{"items":{"$ref":"#/components/schemas/PathAccess"},"type":"array","title":"Paths"}},"type":"object","required":["drive","paths"],"title":"DrivePath"},"DriveDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"icon":{"type":"string","title":"Icon"},"settings":{"$ref":"#/components/schemas/DriveSettings"},"type":{"$ref":"#/components/schemas/DriveType"},"identifier":{"type":"string","title":"Identifier"},"icon_type":{"$ref":"#/components/schemas/DriveIconType"},"member_inherited_role":{"$ref":"#/components/schemas/DriveRole"},"invite_id":{"type":"string","format":"uuid","title":"Invite Id"},"workspace_id":{"type":"string","format":"uuid","title":"Workspace Id"},"byos":{"anyOf":[{"$ref":"#/components/schemas/DriveByosData"},{"type":"null"}]},"default_storage_backend":{"anyOf":[{"$ref":"#/components/schemas/DriveDefaultStorageBackend"},{"type":"null"}]}},"type":"object","required":["id","name","description","icon","settings","type","identifier","icon_type","member_inherited_role","invite_id","workspace_id","byos","default_storage_backend"],"title":"DriveDTO"},"DriveSettings":{"properties":{"max_storage_bytes":{"type":"integer","title":"Max Storage Bytes"},"mount_path_macos":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Macos"},"mount_path_linux":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Linux"},"mount_path_windows":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Windows"}},"type":"object","required":["max_storage_bytes"],"title":"DriveSettings"},"DriveType":{"type":"string","enum":["catalog","magic","vault"],"title":"DriveType"},"DriveIconType":{"type":"string","enum":["color","emoji","attachment"],"title":"DriveIconType"},"DriveRole":{"type":"integer","enum":[50,40,30,20,17,15,10,0],"title":"DriveRole"},"DriveByosData":{"properties":{"bucket":{"type":"string","title":"Bucket"},"endpoint":{"type":"string","title":"Endpoint"}},"type":"object","required":["bucket","endpoint"],"title":"DriveByosData"},"DriveDefaultStorageBackend":{"properties":{"provider":{"type":"string","title":"Provider"},"bucket":{"type":"string","title":"Bucket"}},"type":"object","required":["provider","bucket"],"title":"DriveDefaultStorageBackend"},"PathAccess":{"properties":{"user_id":{"type":"string","format":"uuid","title":"User Id"},"user_name":{"type":"string","title":"User Name"},"path":{"type":"string","title":"Path"},"role":{"$ref":"#/components/schemas/DriveRole"}},"type":"object","required":["user_id","user_name","path","role"],"title":"PathAccess"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## GET /workspaces/drives/{drive\_id}/users

> Lists all the user for a specific drive

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/drives/{drive_id}/users":{"get":{"tags":["workspaces","drives"],"summary":"Lists all the user for a specific drive","operationId":"list_drive_users_workspaces_drives__drive_id__users_get","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_list_drive_users_workspaces_drives__drive_id__users_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/DriveUserDTO"}},{"type":"null"}],"title":"Response List Drive Users Workspaces Drives  Drive Id  Users Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_list_drive_users_workspaces_drives__drive_id__users_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_list_drive_users_workspaces_drives__drive_id__users_get"},"DriveUserDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"},"external_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Id"},"joined":{"type":"string","format":"date-time","title":"Joined"},"role":{"$ref":"#/components/schemas/DriveRole"},"is_workspace_member":{"type":"boolean","title":"Is Workspace Member","default":false},"is_workspace_owner":{"type":"boolean","title":"Is Workspace Owner","default":false},"is_inherited_manager":{"type":"boolean","title":"Is Inherited Manager","default":false},"is_contractor":{"type":"boolean","title":"Is Contractor","default":false}},"type":"object","required":["id","name","email","avatar_url","user_type","external_id","joined","role"],"title":"DriveUserDTO"},"UserType":{"type":"string","enum":["regular","group"],"title":"UserType"},"DriveRole":{"type":"integer","enum":[50,40,30,20,17,15,10,0],"title":"DriveRole"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## POST /workspaces/drives/{drive\_id}/send-invites

> Sends invites for user to join a drive

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/drives/{drive_id}/send-invites":{"post":{"tags":["workspaces","drives"],"summary":"Sends invites for user to join a drive","operationId":"invite_users_to_drive_workspaces_drives__drive_id__send_invites_post","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_invite_users_to_drive_workspaces_drives__drive_id__send_invites_post"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"string","format":"uuid"},"title":"Response Invite Users To Drive Workspaces Drives  Drive Id  Send Invites Post"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_invite_users_to_drive_workspaces_drives__drive_id__send_invites_post":{"properties":{"invites":{"items":{"$ref":"#/components/schemas/DriveInvite"},"type":"array","title":"The workspace invitations","description":"A combination of email and role for the user to invite to the workspace"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invite message"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["invites","message"],"title":"Body_invite_users_to_drive_workspaces_drives__drive_id__send_invites_post"},"DriveInvite":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"role":{"$ref":"#/components/schemas/DriveRole"}},"type":"object","required":["email","role"],"title":"DriveInvite"},"DriveRole":{"type":"integer","enum":[50,40,30,20,17,15,10,0],"title":"DriveRole"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Gets a drive from the drive\_id

> Gets a drive from the drive\_id

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/drives/{drive_id}":{"get":{"tags":["workspaces"],"summary":"Gets a drive from the drive_id","description":"Gets a drive from the drive_id","operationId":"get_workspace_drive_workspaces_drives__drive_id__get","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_workspace_drive_workspaces_drives__drive_id__get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DriveWithActionsDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_workspace_drive_workspaces_drives__drive_id__get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_workspace_drive_workspaces_drives__drive_id__get"},"DriveWithActionsDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"icon":{"type":"string","title":"Icon"},"settings":{"$ref":"#/components/schemas/DriveSettings"},"type":{"$ref":"#/components/schemas/DriveType"},"identifier":{"type":"string","title":"Identifier"},"icon_type":{"$ref":"#/components/schemas/DriveIconType"},"member_inherited_role":{"$ref":"#/components/schemas/DriveRole"},"invite_id":{"type":"string","format":"uuid","title":"Invite Id"},"workspace_id":{"type":"string","format":"uuid","title":"Workspace Id"},"byos":{"anyOf":[{"$ref":"#/components/schemas/DriveByosData"},{"type":"null"}]},"default_storage_backend":{"anyOf":[{"$ref":"#/components/schemas/DriveDefaultStorageBackend"},{"type":"null"}]},"actions":{"items":{"$ref":"#/components/schemas/Action"},"type":"array","title":"Actions"},"role":{"$ref":"#/components/schemas/DriveRole"},"is_workspace_member":{"type":"boolean","title":"Is Workspace Member","default":false}},"type":"object","required":["id","name","description","icon","settings","type","identifier","icon_type","member_inherited_role","invite_id","workspace_id","byos","default_storage_backend","actions","role"],"title":"DriveWithActionsDTO"},"DriveSettings":{"properties":{"max_storage_bytes":{"type":"integer","title":"Max Storage Bytes"},"mount_path_macos":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Macos"},"mount_path_linux":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Linux"},"mount_path_windows":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Windows"}},"type":"object","required":["max_storage_bytes"],"title":"DriveSettings"},"DriveType":{"type":"string","enum":["catalog","magic","vault"],"title":"DriveType"},"DriveIconType":{"type":"string","enum":["color","emoji","attachment"],"title":"DriveIconType"},"DriveRole":{"type":"integer","enum":[50,40,30,20,17,15,10,0],"title":"DriveRole"},"DriveByosData":{"properties":{"bucket":{"type":"string","title":"Bucket"},"endpoint":{"type":"string","title":"Endpoint"}},"type":"object","required":["bucket","endpoint"],"title":"DriveByosData"},"DriveDefaultStorageBackend":{"properties":{"provider":{"type":"string","title":"Provider"},"bucket":{"type":"string","title":"Bucket"}},"type":"object","required":["provider","bucket"],"title":"DriveDefaultStorageBackend"},"Action":{"type":"string","enum":["manage","edit","share","comment","edit_metadata","download","read","read_asset_details","read_metadata","manage_webhooks","manage_drive","view_stack_versions"],"title":"Action"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## PUT /workspaces/drives/{drive\_id}

> Updates drive

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/drives/{drive_id}":{"put":{"tags":["workspaces","drives"],"summary":"Updates drive","operationId":"update_drive_workspaces_drives__drive_id__put","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_update_drive_workspaces_drives__drive_id__put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DriveWithActionsDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_update_drive_workspaces_drives__drive_id__put":{"properties":{"name":{"type":"string","title":"Drive Name"},"description":{"type":"string","title":"Description"},"icon":{"type":"string","title":"Drive Icon"},"icon_type":{"$ref":"#/components/schemas/DriveIconType","title":"Drive Icon"},"member_inherited_role":{"$ref":"#/components/schemas/DriveRole","title":"Member Inherited Role"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["name","description","icon","icon_type","member_inherited_role"],"title":"Body_update_drive_workspaces_drives__drive_id__put"},"DriveIconType":{"type":"string","enum":["color","emoji","attachment"],"title":"DriveIconType"},"DriveRole":{"type":"integer","enum":[50,40,30,20,17,15,10,0],"title":"DriveRole"},"DriveWithActionsDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"icon":{"type":"string","title":"Icon"},"settings":{"$ref":"#/components/schemas/DriveSettings"},"type":{"$ref":"#/components/schemas/DriveType"},"identifier":{"type":"string","title":"Identifier"},"icon_type":{"$ref":"#/components/schemas/DriveIconType"},"member_inherited_role":{"$ref":"#/components/schemas/DriveRole"},"invite_id":{"type":"string","format":"uuid","title":"Invite Id"},"workspace_id":{"type":"string","format":"uuid","title":"Workspace Id"},"byos":{"anyOf":[{"$ref":"#/components/schemas/DriveByosData"},{"type":"null"}]},"default_storage_backend":{"anyOf":[{"$ref":"#/components/schemas/DriveDefaultStorageBackend"},{"type":"null"}]},"actions":{"items":{"$ref":"#/components/schemas/Action"},"type":"array","title":"Actions"},"role":{"$ref":"#/components/schemas/DriveRole"},"is_workspace_member":{"type":"boolean","title":"Is Workspace Member","default":false}},"type":"object","required":["id","name","description","icon","settings","type","identifier","icon_type","member_inherited_role","invite_id","workspace_id","byos","default_storage_backend","actions","role"],"title":"DriveWithActionsDTO"},"DriveSettings":{"properties":{"max_storage_bytes":{"type":"integer","title":"Max Storage Bytes"},"mount_path_macos":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Macos"},"mount_path_linux":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Linux"},"mount_path_windows":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Windows"}},"type":"object","required":["max_storage_bytes"],"title":"DriveSettings"},"DriveType":{"type":"string","enum":["catalog","magic","vault"],"title":"DriveType"},"DriveByosData":{"properties":{"bucket":{"type":"string","title":"Bucket"},"endpoint":{"type":"string","title":"Endpoint"}},"type":"object","required":["bucket","endpoint"],"title":"DriveByosData"},"DriveDefaultStorageBackend":{"properties":{"provider":{"type":"string","title":"Provider"},"bucket":{"type":"string","title":"Bucket"}},"type":"object","required":["provider","bucket"],"title":"DriveDefaultStorageBackend"},"Action":{"type":"string","enum":["manage","edit","share","comment","edit_metadata","download","read","read_asset_details","read_metadata","manage_webhooks","manage_drive","view_stack_versions"],"title":"Action"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## DELETE /workspaces/drives/{drive\_id}

> Delete a drive by drive\_id

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/drives/{drive_id}":{"delete":{"tags":["workspaces","drives"],"summary":"Delete a drive by drive_id","operationId":"delete_drive_workspaces_drives__drive_id__delete","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The workspace id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_delete_drive_workspaces_drives__drive_id__delete"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"boolean","title":"Response Delete Drive Workspaces Drives  Drive Id  Delete"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_delete_drive_workspaces_drives__drive_id__delete":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_delete_drive_workspaces_drives__drive_id__delete"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## PUT /workspaces/drives/{drive\_id}/users/{user\_id}

> Updates people's permissions on a drive

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/drives/{drive_id}/users/{user_id}":{"put":{"tags":["workspaces","drives"],"summary":"Updates people's permissions on a drive","operationId":"update_drive_permissions_workspaces_drives__drive_id__users__user_id__put","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The user id to update"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_update_drive_permissions_workspaces_drives__drive_id__users__user_id__put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_update_drive_permissions_workspaces_drives__drive_id__users__user_id__put":{"properties":{"role":{"$ref":"#/components/schemas/DriveRole","title":"The role to update"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["role"],"title":"Body_update_drive_permissions_workspaces_drives__drive_id__users__user_id__put"},"DriveRole":{"type":"integer","enum":[50,40,30,20,17,15,10,0],"title":"DriveRole"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## DELETE /workspaces/drives/{drive\_id}/users/{user\_id}

> Removes a user from a drive

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/drives/{drive_id}/users/{user_id}":{"delete":{"tags":["workspaces","drives"],"summary":"Removes a user from a drive","operationId":"remove_user_from_drive_workspaces_drives__drive_id__users__user_id__delete","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The user id"}},{"name":"only_remove_direct_access","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Only remove direct access","default":false}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_remove_user_from_drive_workspaces_drives__drive_id__users__user_id__delete"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"boolean","title":"Response Remove User From Drive Workspaces Drives  Drive Id  Users  User Id  Delete"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_remove_user_from_drive_workspaces_drives__drive_id__users__user_id__delete":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_remove_user_from_drive_workspaces_drives__drive_id__users__user_id__delete"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## GET /workspaces/drives/{drive\_id}/shade-fs-token

> Get a signed JWT for a specific drive

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/drives/{drive_id}/shade-fs-token":{"get":{"tags":["workspaces","drives"],"summary":"Get a signed JWT for a specific drive","operationId":"get_shade_fs_token_workspaces_drives__drive_id__shade_fs_token_get","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The Drive id"}},{"name":"machine_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Machine ID","description":"The machine ID to embed into the JWT"},"description":"The machine ID to embed into the JWT"},{"name":"share_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Share ID","description":"If provided, only include this specific share path in the token"},"description":"If provided, only include this specific share path in the token"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_shade_fs_token_workspaces_drives__drive_id__shade_fs_token_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_shade_fs_token_workspaces_drives__drive_id__shade_fs_token_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_shade_fs_token_workspaces_drives__drive_id__shade_fs_token_get"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## GET /workspaces/drives/{drive\_id}/shade-message-bus-token

> Get a signed JWT for Shade Message Bus for a specific drive

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/drives/{drive_id}/shade-message-bus-token":{"get":{"tags":["workspaces","drives"],"summary":"Get a signed JWT for Shade Message Bus for a specific drive","operationId":"get_shade_message_bus_token_for_drive_workspaces_drives__drive_id__shade_message_bus_token_get","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Drive Id"}},{"name":"share_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Share id","description":"If user not authenticated, a share id must be passed for a publish path"},"description":"If user not authenticated, a share id must be passed for a publish path"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_shade_message_bus_token_for_drive_workspaces_drives__drive_id__shade_message_bus_token_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_shade_message_bus_token_for_drive_workspaces_drives__drive_id__shade_message_bus_token_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_shade_message_bus_token_for_drive_workspaces_drives__drive_id__shade_message_bus_token_get"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get all the shared links from a drive

> Get all shared links for a drive.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/drives/{drive_id}/drive-shared-links":{"get":{"tags":["workspaces","drives"],"summary":"Get all the shared links from a drive","description":"Get all shared links for a drive.","operationId":"get_drives_shared_links_workspaces_drives__drive_id__drive_shared_links_get","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_drives_shared_links_workspaces_drives__drive_id__drive_shared_links_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PublicShareDTO"},"title":"Response Get Drives Shared Links Workspaces Drives  Drive Id  Drive Shared Links Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_drives_shared_links_workspaces_drives__drive_id__drive_shared_links_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_drives_shared_links_workspaces_drives__drive_id__drive_shared_links_get"},"PublicShareDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"path":{"type":"string","title":"Path"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"is_public_enabled":{"type":"boolean","title":"Is Public Enabled"},"allowed_actions":{"items":{"$ref":"#/components/schemas/Action"},"type":"array","title":"Allowed Actions"},"password_protected":{"type":"boolean","title":"Password Protected"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"expiration_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expiration Date"},"created":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created"},"path_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path Name"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"icon_type":{"$ref":"#/components/schemas/DriveIconType"},"is_expired":{"type":"boolean","title":"Is Expired","default":false}},"type":"object","required":["id","path","drive_id","is_public_enabled","allowed_actions","password_protected"],"title":"PublicShareDTO"},"Action":{"type":"string","enum":["manage","edit","share","comment","edit_metadata","download","read","read_asset_details","read_metadata","manage_webhooks","manage_drive","view_stack_versions"],"title":"Action"},"DriveIconType":{"type":"string","enum":["color","emoji","attachment"],"title":"DriveIconType"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get all the shares for a specific file

> Get all public shares for a specific file.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/drives/{drive_id}/public-file-shares":{"get":{"tags":["workspaces","drives"],"summary":"Get all the shares for a specific file","description":"Get all public shares for a specific file.","operationId":"get_public_file_shares_workspaces_drives__drive_id__public_file_shares_get","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}},{"name":"path","in":"query","required":true,"schema":{"type":"string","title":"The directory path","description":"The directory path to list items","format":"path"},"description":"The directory path to list items"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_public_file_shares_workspaces_drives__drive_id__public_file_shares_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PublicShareDTO"},"title":"Response Get Public File Shares Workspaces Drives  Drive Id  Public File Shares Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_public_file_shares_workspaces_drives__drive_id__public_file_shares_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_public_file_shares_workspaces_drives__drive_id__public_file_shares_get"},"PublicShareDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"path":{"type":"string","title":"Path"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"is_public_enabled":{"type":"boolean","title":"Is Public Enabled"},"allowed_actions":{"items":{"$ref":"#/components/schemas/Action"},"type":"array","title":"Allowed Actions"},"password_protected":{"type":"boolean","title":"Password Protected"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"expiration_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expiration Date"},"created":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created"},"path_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path Name"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"icon_type":{"$ref":"#/components/schemas/DriveIconType"},"is_expired":{"type":"boolean","title":"Is Expired","default":false}},"type":"object","required":["id","path","drive_id","is_public_enabled","allowed_actions","password_protected"],"title":"PublicShareDTO"},"Action":{"type":"string","enum":["manage","edit","share","comment","edit_metadata","download","read","read_asset_details","read_metadata","manage_webhooks","manage_drive","view_stack_versions"],"title":"Action"},"DriveIconType":{"type":"string","enum":["color","emoji","attachment"],"title":"DriveIconType"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Create a public share for a specific file or folder

> Share a file on a workspace.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/drives/{drive_id}/public-file-shares":{"post":{"tags":["workspaces","drives"],"summary":"Create a public share for a specific file or folder","description":"Share a file on a workspace.","operationId":"create_public_file_shares_workspaces_drives__drive_id__public_file_shares_post","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_create_public_file_shares_workspaces_drives__drive_id__public_file_shares_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicShareDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_create_public_file_shares_workspaces_drives__drive_id__public_file_shares_post":{"properties":{"path":{"type":"string","format":"path","title":"The directory path","description":"The directory path to list items"},"is_public_enabled":{"type":"boolean","title":"Whether the share is enabled","description":"Whether the share is enabled"},"allowed_actions":{"items":{"$ref":"#/components/schemas/Action"},"type":"array","title":"The actions allowed on the share","description":"The actions allowed on the share"},"name":{"type":"string","title":"The name of the share","description":"The name of the share"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The icon of the share","description":"The icon of the share"},"icon_type":{"anyOf":[{"$ref":"#/components/schemas/DriveIconType"},{"type":"null"}],"title":"The icon type of the share","description":"The icon type of the share","default":"color"},"expiration_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"The expiration date of the share","description":"The expiration date of the share"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password of the share","description":"The password of the share"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["path","is_public_enabled","allowed_actions","name"],"title":"Body_create_public_file_shares_workspaces_drives__drive_id__public_file_shares_post"},"Action":{"type":"string","enum":["manage","edit","share","comment","edit_metadata","download","read","read_asset_details","read_metadata","manage_webhooks","manage_drive","view_stack_versions"],"title":"Action"},"DriveIconType":{"type":"string","enum":["color","emoji","attachment"],"title":"DriveIconType"},"PublicShareDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"path":{"type":"string","title":"Path"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"is_public_enabled":{"type":"boolean","title":"Is Public Enabled"},"allowed_actions":{"items":{"$ref":"#/components/schemas/Action"},"type":"array","title":"Allowed Actions"},"password_protected":{"type":"boolean","title":"Password Protected"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"expiration_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expiration Date"},"created":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created"},"path_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path Name"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"icon_type":{"$ref":"#/components/schemas/DriveIconType"},"is_expired":{"type":"boolean","title":"Is Expired","default":false}},"type":"object","required":["id","path","drive_id","is_public_enabled","allowed_actions","password_protected"],"title":"PublicShareDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Update a public share for a specific file or folder

> Update a public share for a specific file or folder.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/drives/{drive_id}/public-file-shares/{share_id}":{"put":{"tags":["workspaces","drives"],"summary":"Update a public share for a specific file or folder","description":"Update a public share for a specific file or folder.","operationId":"update_public_file_share_workspaces_drives__drive_id__public_file_shares__share_id__put","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}},{"name":"share_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The share id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_update_public_file_share_workspaces_drives__drive_id__public_file_shares__share_id__put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_update_public_file_share_workspaces_drives__drive_id__public_file_shares__share_id__put":{"properties":{"is_public_enabled":{"type":"boolean","title":"Whether the share is enabled","description":"Whether the share is enabled"},"allowed_actions":{"items":{"$ref":"#/components/schemas/Action"},"type":"array","title":"The actions allowed on the share","description":"The actions allowed on the share"},"name":{"type":"string","title":"The name of the share","description":"The name of the share","default":""},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The icon of the share","description":"The icon of the share"},"icon_type":{"anyOf":[{"$ref":"#/components/schemas/DriveIconType"},{"type":"null"}],"title":"The icon type of the share","description":"The icon type of the share","default":"color"},"expiration_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"The expiration date of the share","description":"The expiration date of the share"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password of the share","description":"The password of the share"},"removed_password":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Removed password","description":"remove the public link password","default":false},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["is_public_enabled","allowed_actions"],"title":"Body_update_public_file_share_workspaces_drives__drive_id__public_file_shares__share_id__put"},"Action":{"type":"string","enum":["manage","edit","share","comment","edit_metadata","download","read","read_asset_details","read_metadata","manage_webhooks","manage_drive","view_stack_versions"],"title":"Action"},"DriveIconType":{"type":"string","enum":["color","emoji","attachment"],"title":"DriveIconType"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Delete a public share for a specific file or folder

> Share a file on a workspace.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/drives/{drive_id}/public-file-shares/{share_id}":{"delete":{"tags":["workspaces","drives"],"summary":"Delete a public share for a specific file or folder","description":"Share a file on a workspace.","operationId":"delete_public_file_share_workspaces_drives__drive_id__public_file_shares__share_id__delete","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}},{"name":"share_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The share id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_delete_public_file_share_workspaces_drives__drive_id__public_file_shares__share_id__delete"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_delete_public_file_share_workspaces_drives__drive_id__public_file_shares__share_id__delete":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_delete_public_file_share_workspaces_drives__drive_id__public_file_shares__share_id__delete"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## PUT /workspaces/drives/{drive\_id}/settings

> Update drive settings

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/drives/{drive_id}/settings":{"put":{"tags":["workspaces","drives"],"summary":"Update drive settings","operationId":"update_drive_settings_workspaces_drives__drive_id__settings_put","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DriveSettingsPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"DriveSettingsPatch":{"properties":{"max_storage_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Storage Bytes"},"mount_path_macos":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Macos"},"mount_path_linux":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Linux"},"mount_path_windows":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Windows"}},"type":"object","title":"DriveSettingsPatch"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## GET /workspaces

> Lists all the workspaces for that user based on permissions

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces":{"get":{"tags":["workspaces"],"summary":"Lists all the workspaces for that user based on permissions","operationId":"list_workspaces_workspaces_get","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_list_workspaces_workspaces_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WorkspaceListDTO"},"title":"Response List Workspaces Workspaces Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_list_workspaces_workspaces_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_list_workspaces_workspaces_get"},"WorkspaceListDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"domain":{"type":"string","title":"Domain"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"member_inherited_role":{"$ref":"#/components/schemas/WorkspaceRole"},"invite_id":{"type":"string","format":"uuid","title":"Invite Id"},"type":{"$ref":"#/components/schemas/WorkspaceType"},"onboarding":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Onboarding"},"settings":{"$ref":"#/components/schemas/WorkspaceSettings"},"trial_started":{"type":"boolean","title":"Trial Started"},"organization":{"anyOf":[{"$ref":"#/components/schemas/OrganizationDTO"},{"type":"null"}]},"client_metadata":{"additionalProperties":true,"type":"object","title":"Client Metadata"},"actions":{"items":{"$ref":"#/components/schemas/Action"},"type":"array","title":"Actions"},"personal":{"type":"boolean","title":"Personal"},"role":{"$ref":"#/components/schemas/WorkspaceRole"}},"type":"object","required":["id","name","description","domain","thumbnail","member_inherited_role","invite_id","type","onboarding","settings","trial_started","organization","client_metadata","actions","personal","role"],"title":"WorkspaceListDTO"},"WorkspaceRole":{"type":"integer","enum":[60,50,30,20,15,10],"title":"WorkspaceRole"},"WorkspaceType":{"type":"string","enum":["PERSONAL","TEAM"],"title":"WorkspaceType"},"WorkspaceSettings":{"properties":{"transcription_model":{"$ref":"#/components/schemas/TranscriptionModelType"},"default_drive_inheritance":{"anyOf":[{"$ref":"#/components/schemas/DriveRole"},{"type":"null"}]}},"type":"object","required":["transcription_model"],"title":"WorkspaceSettings"},"TranscriptionModelType":{"type":"string","enum":["BEST","NANO"],"title":"TranscriptionModelType"},"DriveRole":{"type":"integer","enum":[50,40,30,20,17,15,10,0],"title":"DriveRole"},"OrganizationDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"url_subdomain":{"type":"string","title":"Url Subdomain"},"email_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email Domain"},"client_metadata":{"additionalProperties":true,"type":"object","title":"Client Metadata"},"partnership_type":{"anyOf":[{"$ref":"#/components/schemas/PartnershipType"},{"type":"null"}]},"discount_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Discount Amount"}},"type":"object","required":["id","name","url_subdomain","email_domain","client_metadata","partnership_type","discount_amount"],"title":"OrganizationDTO"},"PartnershipType":{"type":"string","enum":["BRANDING","DISCOUNT","CONTRACT"],"title":"PartnershipType"},"Action":{"type":"string","enum":["manage","edit","share","comment","edit_metadata","download","read","read_asset_details","read_metadata","manage_webhooks","manage_drive","view_stack_versions"],"title":"Action"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Creates a workspace

> Create a workspace.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces":{"post":{"tags":["workspaces"],"summary":"Creates a workspace","description":"Create a workspace.","operationId":"create_workspace_workspaces_post","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_create_workspace_workspaces_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_create_workspace_workspaces_post":{"properties":{"url_subdomain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url subdomain if workspace is created under an organization"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Workspace description"},"team_size_analytics":{"type":"string","title":"Team Size"},"team_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Domain"},"team_usage_analytics":{"type":"string","title":"How will you use shade"},"data_types_analytics":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Data types"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Picture","description":"The profile picture's link to image"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain of workspace","description":"Custom domain for the workspae"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["name","description","team_size_analytics","team_usage_analytics"],"title":"Body_create_workspace_workspaces_post"},"WorkspaceDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"domain":{"type":"string","title":"Domain"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"member_inherited_role":{"$ref":"#/components/schemas/WorkspaceRole"},"invite_id":{"type":"string","format":"uuid","title":"Invite Id"},"type":{"$ref":"#/components/schemas/WorkspaceType"},"onboarding":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Onboarding"},"settings":{"$ref":"#/components/schemas/WorkspaceSettings"},"trial_started":{"type":"boolean","title":"Trial Started"},"organization":{"anyOf":[{"$ref":"#/components/schemas/OrganizationDTO"},{"type":"null"}]},"client_metadata":{"additionalProperties":true,"type":"object","title":"Client Metadata"}},"type":"object","required":["id","name","description","domain","thumbnail","member_inherited_role","invite_id","type","onboarding","settings","trial_started","organization","client_metadata"],"title":"WorkspaceDTO"},"WorkspaceRole":{"type":"integer","enum":[60,50,30,20,15,10],"title":"WorkspaceRole"},"WorkspaceType":{"type":"string","enum":["PERSONAL","TEAM"],"title":"WorkspaceType"},"WorkspaceSettings":{"properties":{"transcription_model":{"$ref":"#/components/schemas/TranscriptionModelType"},"default_drive_inheritance":{"anyOf":[{"$ref":"#/components/schemas/DriveRole"},{"type":"null"}]}},"type":"object","required":["transcription_model"],"title":"WorkspaceSettings"},"TranscriptionModelType":{"type":"string","enum":["BEST","NANO"],"title":"TranscriptionModelType"},"DriveRole":{"type":"integer","enum":[50,40,30,20,17,15,10,0],"title":"DriveRole"},"OrganizationDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"url_subdomain":{"type":"string","title":"Url Subdomain"},"email_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email Domain"},"client_metadata":{"additionalProperties":true,"type":"object","title":"Client Metadata"},"partnership_type":{"anyOf":[{"$ref":"#/components/schemas/PartnershipType"},{"type":"null"}]},"discount_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Discount Amount"}},"type":"object","required":["id","name","url_subdomain","email_domain","client_metadata","partnership_type","discount_amount"],"title":"OrganizationDTO"},"PartnershipType":{"type":"string","enum":["BRANDING","DISCOUNT","CONTRACT"],"title":"PartnershipType"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## GET /workspaces/{workspace\_id}/drives

> Lists all the drives for a specific workspace

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/{workspace_id}/drives":{"get":{"tags":["workspaces"],"summary":"Lists all the drives for a specific workspace","operationId":"list_workspace_drives_workspaces__workspace_id__drives_get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The workspace id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_list_workspace_drives_workspaces__workspace_id__drives_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DriveWithActionsDTO"},"title":"Response List Workspace Drives Workspaces  Workspace Id  Drives Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_list_workspace_drives_workspaces__workspace_id__drives_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_list_workspace_drives_workspaces__workspace_id__drives_get"},"DriveWithActionsDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"icon":{"type":"string","title":"Icon"},"settings":{"$ref":"#/components/schemas/DriveSettings"},"type":{"$ref":"#/components/schemas/DriveType"},"identifier":{"type":"string","title":"Identifier"},"icon_type":{"$ref":"#/components/schemas/DriveIconType"},"member_inherited_role":{"$ref":"#/components/schemas/DriveRole"},"invite_id":{"type":"string","format":"uuid","title":"Invite Id"},"workspace_id":{"type":"string","format":"uuid","title":"Workspace Id"},"byos":{"anyOf":[{"$ref":"#/components/schemas/DriveByosData"},{"type":"null"}]},"default_storage_backend":{"anyOf":[{"$ref":"#/components/schemas/DriveDefaultStorageBackend"},{"type":"null"}]},"actions":{"items":{"$ref":"#/components/schemas/Action"},"type":"array","title":"Actions"},"role":{"$ref":"#/components/schemas/DriveRole"},"is_workspace_member":{"type":"boolean","title":"Is Workspace Member","default":false}},"type":"object","required":["id","name","description","icon","settings","type","identifier","icon_type","member_inherited_role","invite_id","workspace_id","byos","default_storage_backend","actions","role"],"title":"DriveWithActionsDTO"},"DriveSettings":{"properties":{"max_storage_bytes":{"type":"integer","title":"Max Storage Bytes"},"mount_path_macos":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Macos"},"mount_path_linux":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Linux"},"mount_path_windows":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Windows"}},"type":"object","required":["max_storage_bytes"],"title":"DriveSettings"},"DriveType":{"type":"string","enum":["catalog","magic","vault"],"title":"DriveType"},"DriveIconType":{"type":"string","enum":["color","emoji","attachment"],"title":"DriveIconType"},"DriveRole":{"type":"integer","enum":[50,40,30,20,17,15,10,0],"title":"DriveRole"},"DriveByosData":{"properties":{"bucket":{"type":"string","title":"Bucket"},"endpoint":{"type":"string","title":"Endpoint"}},"type":"object","required":["bucket","endpoint"],"title":"DriveByosData"},"DriveDefaultStorageBackend":{"properties":{"provider":{"type":"string","title":"Provider"},"bucket":{"type":"string","title":"Bucket"}},"type":"object","required":["provider","bucket"],"title":"DriveDefaultStorageBackend"},"Action":{"type":"string","enum":["manage","edit","share","comment","edit_metadata","download","read","read_asset_details","read_metadata","manage_webhooks","manage_drive","view_stack_versions"],"title":"Action"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Creates a drive in a workspace

> Create a Drive

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/{workspace_id}/drives":{"post":{"tags":["workspaces"],"summary":"Creates a drive in a workspace","description":"Create a Drive","operationId":"create_workspace_drive_workspaces__workspace_id__drives_post","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The workspace id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_create_workspace_drive_workspaces__workspace_id__drives_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DriveWithActionsDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_create_workspace_drive_workspaces__workspace_id__drives_post":{"properties":{"name":{"type":"string","title":"Drive Name"},"description":{"type":"string","title":"Drive Description"},"type":{"$ref":"#/components/schemas/DriveType","title":"Drive Type"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Drive Icon"},"icon_type":{"anyOf":[{"$ref":"#/components/schemas/DriveIconType"},{"type":"null"}],"title":"Drive Icon Type"},"byos":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"BYOS Info"},"default_storage_backend":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Default Provider info"},"template_drive_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Template Drive"},"public_template_key":{"anyOf":[{"$ref":"#/components/schemas/PublicDriveTemplate"},{"type":"null"}],"title":"Public Template Key"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["name","description","type","icon_type"],"title":"Body_create_workspace_drive_workspaces__workspace_id__drives_post"},"DriveType":{"type":"string","enum":["catalog","magic","vault"],"title":"DriveType"},"DriveIconType":{"type":"string","enum":["color","emoji","attachment"],"title":"DriveIconType"},"PublicDriveTemplate":{"type":"string","enum":["video_production","commercial_photography","marketing_agency"],"title":"PublicDriveTemplate"},"DriveWithActionsDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"icon":{"type":"string","title":"Icon"},"settings":{"$ref":"#/components/schemas/DriveSettings"},"type":{"$ref":"#/components/schemas/DriveType"},"identifier":{"type":"string","title":"Identifier"},"icon_type":{"$ref":"#/components/schemas/DriveIconType"},"member_inherited_role":{"$ref":"#/components/schemas/DriveRole"},"invite_id":{"type":"string","format":"uuid","title":"Invite Id"},"workspace_id":{"type":"string","format":"uuid","title":"Workspace Id"},"byos":{"anyOf":[{"$ref":"#/components/schemas/DriveByosData"},{"type":"null"}]},"default_storage_backend":{"anyOf":[{"$ref":"#/components/schemas/DriveDefaultStorageBackend"},{"type":"null"}]},"actions":{"items":{"$ref":"#/components/schemas/Action"},"type":"array","title":"Actions"},"role":{"$ref":"#/components/schemas/DriveRole"},"is_workspace_member":{"type":"boolean","title":"Is Workspace Member","default":false}},"type":"object","required":["id","name","description","icon","settings","type","identifier","icon_type","member_inherited_role","invite_id","workspace_id","byos","default_storage_backend","actions","role"],"title":"DriveWithActionsDTO"},"DriveSettings":{"properties":{"max_storage_bytes":{"type":"integer","title":"Max Storage Bytes"},"mount_path_macos":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Macos"},"mount_path_linux":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Linux"},"mount_path_windows":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Windows"}},"type":"object","required":["max_storage_bytes"],"title":"DriveSettings"},"DriveRole":{"type":"integer","enum":[50,40,30,20,17,15,10,0],"title":"DriveRole"},"DriveByosData":{"properties":{"bucket":{"type":"string","title":"Bucket"},"endpoint":{"type":"string","title":"Endpoint"}},"type":"object","required":["bucket","endpoint"],"title":"DriveByosData"},"DriveDefaultStorageBackend":{"properties":{"provider":{"type":"string","title":"Provider"},"bucket":{"type":"string","title":"Bucket"}},"type":"object","required":["provider","bucket"],"title":"DriveDefaultStorageBackend"},"Action":{"type":"string","enum":["manage","edit","share","comment","edit_metadata","download","read","read_asset_details","read_metadata","manage_webhooks","manage_drive","view_stack_versions"],"title":"Action"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Lists all user drives (including demo workspace drives)

> This route is used to get all the drives for a user.\
> The frontend uses this to determine which shadefs drives should be kept/removed

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/drive-ids":{"get":{"tags":["workspaces"],"summary":"Lists all user drives (including demo workspace drives)","description":"This route is used to get all the drives for a user.\nThe frontend uses this to determine which shadefs drives should be kept/removed","operationId":"list_all_user_drives_workspaces_drive_ids_get","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_list_all_user_drives_workspaces_drive_ids_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"string","format":"uuid"},"title":"Response List All User Drives Workspaces Drive Ids Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_list_all_user_drives_workspaces_drive_ids_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_list_all_user_drives_workspaces_drive_ids_get"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Lists all the paths for a user in a specific workspace

> Lists all the paths for a specific user on a workspace

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/{workspace_id}/user-paths/{user_id}":{"get":{"tags":["workspaces"],"summary":"Lists all the paths for a user in a specific workspace","description":"Lists all the paths for a specific user on a workspace","operationId":"list_user_path_access_on_workspace_workspaces__workspace_id__user_paths__user_id__get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The workspace id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The user id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_list_user_path_access_on_workspace_workspaces__workspace_id__user_paths__user_id__get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DrivePath"},"title":"Response List User Path Access On Workspace Workspaces  Workspace Id  User Paths  User Id  Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_list_user_path_access_on_workspace_workspaces__workspace_id__user_paths__user_id__get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_list_user_path_access_on_workspace_workspaces__workspace_id__user_paths__user_id__get"},"DrivePath":{"properties":{"drive":{"$ref":"#/components/schemas/DriveDTO"},"paths":{"items":{"$ref":"#/components/schemas/PathAccess"},"type":"array","title":"Paths"}},"type":"object","required":["drive","paths"],"title":"DrivePath"},"DriveDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"icon":{"type":"string","title":"Icon"},"settings":{"$ref":"#/components/schemas/DriveSettings"},"type":{"$ref":"#/components/schemas/DriveType"},"identifier":{"type":"string","title":"Identifier"},"icon_type":{"$ref":"#/components/schemas/DriveIconType"},"member_inherited_role":{"$ref":"#/components/schemas/DriveRole"},"invite_id":{"type":"string","format":"uuid","title":"Invite Id"},"workspace_id":{"type":"string","format":"uuid","title":"Workspace Id"},"byos":{"anyOf":[{"$ref":"#/components/schemas/DriveByosData"},{"type":"null"}]},"default_storage_backend":{"anyOf":[{"$ref":"#/components/schemas/DriveDefaultStorageBackend"},{"type":"null"}]}},"type":"object","required":["id","name","description","icon","settings","type","identifier","icon_type","member_inherited_role","invite_id","workspace_id","byos","default_storage_backend"],"title":"DriveDTO"},"DriveSettings":{"properties":{"max_storage_bytes":{"type":"integer","title":"Max Storage Bytes"},"mount_path_macos":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Macos"},"mount_path_linux":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Linux"},"mount_path_windows":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Windows"}},"type":"object","required":["max_storage_bytes"],"title":"DriveSettings"},"DriveType":{"type":"string","enum":["catalog","magic","vault"],"title":"DriveType"},"DriveIconType":{"type":"string","enum":["color","emoji","attachment"],"title":"DriveIconType"},"DriveRole":{"type":"integer","enum":[50,40,30,20,17,15,10,0],"title":"DriveRole"},"DriveByosData":{"properties":{"bucket":{"type":"string","title":"Bucket"},"endpoint":{"type":"string","title":"Endpoint"}},"type":"object","required":["bucket","endpoint"],"title":"DriveByosData"},"DriveDefaultStorageBackend":{"properties":{"provider":{"type":"string","title":"Provider"},"bucket":{"type":"string","title":"Bucket"}},"type":"object","required":["provider","bucket"],"title":"DriveDefaultStorageBackend"},"PathAccess":{"properties":{"user_id":{"type":"string","format":"uuid","title":"User Id"},"user_name":{"type":"string","title":"User Name"},"path":{"type":"string","title":"Path"},"role":{"$ref":"#/components/schemas/DriveRole"}},"type":"object","required":["user_id","user_name","path","role"],"title":"PathAccess"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Lists all the paths for a specific workspace

> For drive and workspace users, list their access and paths.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/{workspace_id}/user-paths":{"get":{"tags":["workspaces"],"summary":"Lists all the paths for a specific workspace","description":"For drive and workspace users, list their access and paths.","operationId":"list_user_path_access_workspaces_workspaces__workspace_id__user_paths_get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The workspace id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_list_user_path_access_workspaces_workspaces__workspace_id__user_paths_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DrivePath"},"title":"Response List User Path Access Workspaces Workspaces  Workspace Id  User Paths Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_list_user_path_access_workspaces_workspaces__workspace_id__user_paths_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_list_user_path_access_workspaces_workspaces__workspace_id__user_paths_get"},"DrivePath":{"properties":{"drive":{"$ref":"#/components/schemas/DriveDTO"},"paths":{"items":{"$ref":"#/components/schemas/PathAccess"},"type":"array","title":"Paths"}},"type":"object","required":["drive","paths"],"title":"DrivePath"},"DriveDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"icon":{"type":"string","title":"Icon"},"settings":{"$ref":"#/components/schemas/DriveSettings"},"type":{"$ref":"#/components/schemas/DriveType"},"identifier":{"type":"string","title":"Identifier"},"icon_type":{"$ref":"#/components/schemas/DriveIconType"},"member_inherited_role":{"$ref":"#/components/schemas/DriveRole"},"invite_id":{"type":"string","format":"uuid","title":"Invite Id"},"workspace_id":{"type":"string","format":"uuid","title":"Workspace Id"},"byos":{"anyOf":[{"$ref":"#/components/schemas/DriveByosData"},{"type":"null"}]},"default_storage_backend":{"anyOf":[{"$ref":"#/components/schemas/DriveDefaultStorageBackend"},{"type":"null"}]}},"type":"object","required":["id","name","description","icon","settings","type","identifier","icon_type","member_inherited_role","invite_id","workspace_id","byos","default_storage_backend"],"title":"DriveDTO"},"DriveSettings":{"properties":{"max_storage_bytes":{"type":"integer","title":"Max Storage Bytes"},"mount_path_macos":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Macos"},"mount_path_linux":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Linux"},"mount_path_windows":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Windows"}},"type":"object","required":["max_storage_bytes"],"title":"DriveSettings"},"DriveType":{"type":"string","enum":["catalog","magic","vault"],"title":"DriveType"},"DriveIconType":{"type":"string","enum":["color","emoji","attachment"],"title":"DriveIconType"},"DriveRole":{"type":"integer","enum":[50,40,30,20,17,15,10,0],"title":"DriveRole"},"DriveByosData":{"properties":{"bucket":{"type":"string","title":"Bucket"},"endpoint":{"type":"string","title":"Endpoint"}},"type":"object","required":["bucket","endpoint"],"title":"DriveByosData"},"DriveDefaultStorageBackend":{"properties":{"provider":{"type":"string","title":"Provider"},"bucket":{"type":"string","title":"Bucket"}},"type":"object","required":["provider","bucket"],"title":"DriveDefaultStorageBackend"},"PathAccess":{"properties":{"user_id":{"type":"string","format":"uuid","title":"User Id"},"user_name":{"type":"string","title":"User Name"},"path":{"type":"string","title":"Path"},"role":{"$ref":"#/components/schemas/DriveRole"}},"type":"object","required":["user_id","user_name","path","role"],"title":"PathAccess"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## POST /workspaces{workspace\_id}/credits

> Gets the # of available credits on a workspace

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces{workspace_id}/credits":{"post":{"tags":["workspaces"],"summary":"Gets the # of available credits on a workspace","operationId":"get_available_credits_workspaces_workspace_id__credits_post","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The workspace id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_available_credits_workspaces_workspace_id__credits_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"integer","title":"Response Get Available Credits Workspaces Workspace Id  Credits Post"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_available_credits_workspaces_workspace_id__credits_post":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_available_credits_workspaces_workspace_id__credits_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Lists all the drives and your permission level for them

> This is used for the /admin routes

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/{workspace_id}/drives/permissions":{"get":{"tags":["workspaces"],"summary":"Lists all the drives and your permission level for them","description":"This is used for the /admin routes","operationId":"list_workspace_drives_with_permissions_workspaces__workspace_id__drives_permissions_get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The workspace id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_list_workspace_drives_with_permissions_workspaces__workspace_id__drives_permissions_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DrivePermissionsDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_list_workspace_drives_with_permissions_workspaces__workspace_id__drives_permissions_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_list_workspace_drives_with_permissions_workspaces__workspace_id__drives_permissions_get"},"DrivePermissionsDTO":{"properties":{"drives_you_can_manage":{"items":{"$ref":"#/components/schemas/DriveDTO"},"type":"array","title":"Drives You Can Manage"},"drives_you_can_read":{"items":{"$ref":"#/components/schemas/DriveDTO"},"type":"array","title":"Drives You Can Read"}},"type":"object","required":["drives_you_can_manage","drives_you_can_read"],"title":"DrivePermissionsDTO"},"DriveDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"icon":{"type":"string","title":"Icon"},"settings":{"$ref":"#/components/schemas/DriveSettings"},"type":{"$ref":"#/components/schemas/DriveType"},"identifier":{"type":"string","title":"Identifier"},"icon_type":{"$ref":"#/components/schemas/DriveIconType"},"member_inherited_role":{"$ref":"#/components/schemas/DriveRole"},"invite_id":{"type":"string","format":"uuid","title":"Invite Id"},"workspace_id":{"type":"string","format":"uuid","title":"Workspace Id"},"byos":{"anyOf":[{"$ref":"#/components/schemas/DriveByosData"},{"type":"null"}]},"default_storage_backend":{"anyOf":[{"$ref":"#/components/schemas/DriveDefaultStorageBackend"},{"type":"null"}]}},"type":"object","required":["id","name","description","icon","settings","type","identifier","icon_type","member_inherited_role","invite_id","workspace_id","byos","default_storage_backend"],"title":"DriveDTO"},"DriveSettings":{"properties":{"max_storage_bytes":{"type":"integer","title":"Max Storage Bytes"},"mount_path_macos":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Macos"},"mount_path_linux":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Linux"},"mount_path_windows":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Windows"}},"type":"object","required":["max_storage_bytes"],"title":"DriveSettings"},"DriveType":{"type":"string","enum":["catalog","magic","vault"],"title":"DriveType"},"DriveIconType":{"type":"string","enum":["color","emoji","attachment"],"title":"DriveIconType"},"DriveRole":{"type":"integer","enum":[50,40,30,20,17,15,10,0],"title":"DriveRole"},"DriveByosData":{"properties":{"bucket":{"type":"string","title":"Bucket"},"endpoint":{"type":"string","title":"Endpoint"}},"type":"object","required":["bucket","endpoint"],"title":"DriveByosData"},"DriveDefaultStorageBackend":{"properties":{"provider":{"type":"string","title":"Provider"},"bucket":{"type":"string","title":"Bucket"}},"type":"object","required":["provider","bucket"],"title":"DriveDefaultStorageBackend"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## GET /workspaces/{workspace\_id}/users

> Lists all the users for a specific workspace

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/{workspace_id}/users":{"get":{"tags":["workspaces"],"summary":"Lists all the users for a specific workspace","operationId":"list_workspace_users_workspaces__workspace_id__users_get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The workspace id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_list_workspace_users_workspaces__workspace_id__users_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WorkspaceUserDTO"},"title":"Response List Workspace Users Workspaces  Workspace Id  Users Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_list_workspace_users_workspaces__workspace_id__users_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_list_workspace_users_workspaces__workspace_id__users_get"},"WorkspaceUserDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"},"external_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Id"},"joined":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Joined"},"role":{"$ref":"#/components/schemas/WorkspaceRole"},"is_workspace_member":{"type":"boolean","title":"Is Workspace Member","default":false},"is_workspace_owner":{"type":"boolean","title":"Is Workspace Owner","default":false},"is_contractor":{"type":"boolean","title":"Is Contractor","default":false}},"type":"object","required":["id","name","email","avatar_url","user_type","external_id","role"],"title":"WorkspaceUserDTO"},"UserType":{"type":"string","enum":["regular","group"],"title":"UserType"},"WorkspaceRole":{"type":"integer","enum":[60,50,30,20,15,10],"title":"WorkspaceRole"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## GET /workspaces/{workspace\_id}/users/count

> Lists count of all the users for a specific workspace

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/{workspace_id}/users/count":{"get":{"tags":["workspaces"],"summary":"Lists count of all the users for a specific workspace","operationId":"get_workspace_user_count_route_workspaces__workspace_id__users_count_get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The workspace id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_workspace_user_count_route_workspaces__workspace_id__users_count_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceUserCountDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_workspace_user_count_route_workspaces__workspace_id__users_count_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_workspace_user_count_route_workspaces__workspace_id__users_count_get"},"WorkspaceUserCountDTO":{"properties":{"total_count":{"type":"integer","title":"Total Count"},"member_count":{"type":"integer","title":"Member Count"},"guest_count":{"type":"integer","title":"Guest Count"},"admin_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Admin Count"}},"type":"object","required":["total_count","member_count","guest_count"],"title":"WorkspaceUserCountDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Gets a workspace from the workspace\_id

> Gets a workspace from the workspace\_id

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/{workspace_id}":{"get":{"tags":["workspaces"],"summary":"Gets a workspace from the workspace_id","description":"Gets a workspace from the workspace_id","operationId":"get_workspace_workspaces__workspace_id__get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The workspace id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_workspace_workspaces__workspace_id__get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceListDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_workspace_workspaces__workspace_id__get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_workspace_workspaces__workspace_id__get"},"WorkspaceListDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"domain":{"type":"string","title":"Domain"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"member_inherited_role":{"$ref":"#/components/schemas/WorkspaceRole"},"invite_id":{"type":"string","format":"uuid","title":"Invite Id"},"type":{"$ref":"#/components/schemas/WorkspaceType"},"onboarding":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Onboarding"},"settings":{"$ref":"#/components/schemas/WorkspaceSettings"},"trial_started":{"type":"boolean","title":"Trial Started"},"organization":{"anyOf":[{"$ref":"#/components/schemas/OrganizationDTO"},{"type":"null"}]},"client_metadata":{"additionalProperties":true,"type":"object","title":"Client Metadata"},"actions":{"items":{"$ref":"#/components/schemas/Action"},"type":"array","title":"Actions"},"personal":{"type":"boolean","title":"Personal"},"role":{"$ref":"#/components/schemas/WorkspaceRole"}},"type":"object","required":["id","name","description","domain","thumbnail","member_inherited_role","invite_id","type","onboarding","settings","trial_started","organization","client_metadata","actions","personal","role"],"title":"WorkspaceListDTO"},"WorkspaceRole":{"type":"integer","enum":[60,50,30,20,15,10],"title":"WorkspaceRole"},"WorkspaceType":{"type":"string","enum":["PERSONAL","TEAM"],"title":"WorkspaceType"},"WorkspaceSettings":{"properties":{"transcription_model":{"$ref":"#/components/schemas/TranscriptionModelType"},"default_drive_inheritance":{"anyOf":[{"$ref":"#/components/schemas/DriveRole"},{"type":"null"}]}},"type":"object","required":["transcription_model"],"title":"WorkspaceSettings"},"TranscriptionModelType":{"type":"string","enum":["BEST","NANO"],"title":"TranscriptionModelType"},"DriveRole":{"type":"integer","enum":[50,40,30,20,17,15,10,0],"title":"DriveRole"},"OrganizationDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"url_subdomain":{"type":"string","title":"Url Subdomain"},"email_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email Domain"},"client_metadata":{"additionalProperties":true,"type":"object","title":"Client Metadata"},"partnership_type":{"anyOf":[{"$ref":"#/components/schemas/PartnershipType"},{"type":"null"}]},"discount_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Discount Amount"}},"type":"object","required":["id","name","url_subdomain","email_domain","client_metadata","partnership_type","discount_amount"],"title":"OrganizationDTO"},"PartnershipType":{"type":"string","enum":["BRANDING","DISCOUNT","CONTRACT"],"title":"PartnershipType"},"Action":{"type":"string","enum":["manage","edit","share","comment","edit_metadata","download","read","read_asset_details","read_metadata","manage_webhooks","manage_drive","view_stack_versions"],"title":"Action"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Updates a workspace

> Update a workspace.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/{workspace_id}":{"put":{"tags":["workspaces"],"summary":"Updates a workspace","description":"Update a workspace.","operationId":"update_workspace_workspaces__workspace_id__put","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The workspace id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_update_workspace_workspaces__workspace_id__put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_update_workspace_workspaces__workspace_id__put":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workspace Name"},"domain":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z0-9.-]+$"},{"type":"null"}],"title":"Workspace Domain"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"team_size_analytics":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Size"},"team_usage_analytics":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"How will you use shade"},"data_types_analytics":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Data types"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Picture","description":"The profile picture's byte array"},"onboarding_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Onboarding Key","description":"Workspace onboarding key to set as finished"},"client_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Client metadata","description":"set client metadata"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_update_workspace_workspaces__workspace_id__put"},"WorkspaceDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"domain":{"type":"string","title":"Domain"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"member_inherited_role":{"$ref":"#/components/schemas/WorkspaceRole"},"invite_id":{"type":"string","format":"uuid","title":"Invite Id"},"type":{"$ref":"#/components/schemas/WorkspaceType"},"onboarding":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Onboarding"},"settings":{"$ref":"#/components/schemas/WorkspaceSettings"},"trial_started":{"type":"boolean","title":"Trial Started"},"organization":{"anyOf":[{"$ref":"#/components/schemas/OrganizationDTO"},{"type":"null"}]},"client_metadata":{"additionalProperties":true,"type":"object","title":"Client Metadata"}},"type":"object","required":["id","name","description","domain","thumbnail","member_inherited_role","invite_id","type","onboarding","settings","trial_started","organization","client_metadata"],"title":"WorkspaceDTO"},"WorkspaceRole":{"type":"integer","enum":[60,50,30,20,15,10],"title":"WorkspaceRole"},"WorkspaceType":{"type":"string","enum":["PERSONAL","TEAM"],"title":"WorkspaceType"},"WorkspaceSettings":{"properties":{"transcription_model":{"$ref":"#/components/schemas/TranscriptionModelType"},"default_drive_inheritance":{"anyOf":[{"$ref":"#/components/schemas/DriveRole"},{"type":"null"}]}},"type":"object","required":["transcription_model"],"title":"WorkspaceSettings"},"TranscriptionModelType":{"type":"string","enum":["BEST","NANO"],"title":"TranscriptionModelType"},"DriveRole":{"type":"integer","enum":[50,40,30,20,17,15,10,0],"title":"DriveRole"},"OrganizationDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"url_subdomain":{"type":"string","title":"Url Subdomain"},"email_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email Domain"},"client_metadata":{"additionalProperties":true,"type":"object","title":"Client Metadata"},"partnership_type":{"anyOf":[{"$ref":"#/components/schemas/PartnershipType"},{"type":"null"}]},"discount_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Discount Amount"}},"type":"object","required":["id","name","url_subdomain","email_domain","client_metadata","partnership_type","discount_amount"],"title":"OrganizationDTO"},"PartnershipType":{"type":"string","enum":["BRANDING","DISCOUNT","CONTRACT"],"title":"PartnershipType"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## DELETE /workspaces/{workspace\_id}

> Deletes a workspace

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/{workspace_id}":{"delete":{"tags":["workspaces"],"summary":"Deletes a workspace","operationId":"delete_workspace_workspaces__workspace_id__delete","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The workspace id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_delete_workspace_workspaces__workspace_id__delete"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"boolean","title":"Response Delete Workspace Workspaces  Workspace Id  Delete"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_delete_workspace_workspaces__workspace_id__delete":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_delete_workspace_workspaces__workspace_id__delete"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## POST /workspaces/avatar/upload-url

> Create an avatar for a workspace

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/avatar/upload-url":{"post":{"tags":["workspaces"],"summary":"Create an avatar for a workspace","operationId":"workspace_create_avatar_upload_url_workspaces_avatar_upload_url_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_workspace_create_avatar_upload_url_workspaces_avatar_upload_url_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Workspace Create Avatar Upload Url Workspaces Avatar Upload Url Post"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_workspace_create_avatar_upload_url_workspaces_avatar_upload_url_post":{"properties":{"extension":{"type":"string","enum":["png","jpg","jpeg"],"title":"Extension","description":"The extension type of the avatar"},"size":{"title":"Size","description":"Size of the avatar"}},"type":"object","required":["extension","size"],"title":"Body_workspace_create_avatar_upload_url_workspaces_avatar_upload_url_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## POST /workspaces/{workspace\_id}/avatar/complete

> Confirm uploading an avatar for a workspace

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/{workspace_id}/avatar/complete":{"post":{"tags":["workspaces"],"summary":"Confirm uploading an avatar for a workspace","operationId":"workspace_complete_avatar_workspaces__workspace_id__avatar_complete_post","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The workspace id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_workspace_complete_avatar_workspaces__workspace_id__avatar_complete_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_workspace_complete_avatar_workspaces__workspace_id__avatar_complete_post":{"properties":{"download_url":{"title":"Download url","description":"The download url"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["download_url"],"title":"Body_workspace_complete_avatar_workspaces__workspace_id__avatar_complete_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## POST /workspaces/{workspace\_id}/send-invites

> Sends invites for user to join a workspace

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/{workspace_id}/send-invites":{"post":{"tags":["workspaces"],"summary":"Sends invites for user to join a workspace","operationId":"invite_people_to_workspace_workspaces__workspace_id__send_invites_post","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The workspace id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_invite_people_to_workspace_workspaces__workspace_id__send_invites_post"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"boolean","title":"Response Invite People To Workspace Workspaces  Workspace Id  Send Invites Post"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_invite_people_to_workspace_workspaces__workspace_id__send_invites_post":{"properties":{"invites":{"items":{"$ref":"#/components/schemas/WorkspaceInvite"},"type":"array","title":"The workspace invitations","description":"A combination of email and role for the user to invite to the workspace"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The invite message","description":"The message to send to the invited user"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["invites","message"],"title":"Body_invite_people_to_workspace_workspaces__workspace_id__send_invites_post"},"WorkspaceInvite":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"role":{"$ref":"#/components/schemas/WorkspaceRole"}},"type":"object","required":["email","role"],"title":"WorkspaceInvite"},"WorkspaceRole":{"type":"integer","enum":[60,50,30,20,15,10],"title":"WorkspaceRole"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Gets data for a specific invitation

> This is a PUBLIC route where anyone can see invites. To see (you've been invited to ... workspace)

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/invites/{invite_id}":{"get":{"tags":["workspaces"],"summary":"Gets data for a specific invitation","description":"This is a PUBLIC route where anyone can see invites. To see (you've been invited to ... workspace)","operationId":"get_invite_data_workspaces_invites__invite_id__get","parameters":[{"name":"invite_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Invite ID"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/WorkspaceInviteDTO"},{"$ref":"#/components/schemas/DriveInviteDTO"},{"type":"null"}],"title":"Response Get Invite Data Workspaces Invites  Invite Id  Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"WorkspaceInviteDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"sent_by":{"anyOf":[{"$ref":"#/components/schemas/UserDTOBase"},{"type":"null"}]},"sent_by_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Sent By Id"},"sent_to_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sent To Email"},"workspace_id":{"type":"string","format":"uuid","title":"Workspace Id"},"workspace":{"$ref":"#/components/schemas/WorkspaceDTO"},"workspace_role":{"$ref":"#/components/schemas/WorkspaceRole"},"invite_type":{"$ref":"#/components/schemas/InviteType"},"invite_target":{"$ref":"#/components/schemas/InviteTarget"}},"type":"object","required":["id","sent_by","sent_by_id","sent_to_email","workspace_id","workspace","workspace_role","invite_type","invite_target"],"title":"WorkspaceInviteDTO"},"UserDTOBase":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"}},"type":"object","required":["id","name","email","avatar_url","user_type"],"title":"UserDTOBase"},"UserType":{"type":"string","enum":["regular","group"],"title":"UserType"},"WorkspaceDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"domain":{"type":"string","title":"Domain"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"member_inherited_role":{"$ref":"#/components/schemas/WorkspaceRole"},"invite_id":{"type":"string","format":"uuid","title":"Invite Id"},"type":{"$ref":"#/components/schemas/WorkspaceType"},"onboarding":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Onboarding"},"settings":{"$ref":"#/components/schemas/WorkspaceSettings"},"trial_started":{"type":"boolean","title":"Trial Started"},"organization":{"anyOf":[{"$ref":"#/components/schemas/OrganizationDTO"},{"type":"null"}]},"client_metadata":{"additionalProperties":true,"type":"object","title":"Client Metadata"}},"type":"object","required":["id","name","description","domain","thumbnail","member_inherited_role","invite_id","type","onboarding","settings","trial_started","organization","client_metadata"],"title":"WorkspaceDTO"},"WorkspaceRole":{"type":"integer","enum":[60,50,30,20,15,10],"title":"WorkspaceRole"},"WorkspaceType":{"type":"string","enum":["PERSONAL","TEAM"],"title":"WorkspaceType"},"WorkspaceSettings":{"properties":{"transcription_model":{"$ref":"#/components/schemas/TranscriptionModelType"},"default_drive_inheritance":{"anyOf":[{"$ref":"#/components/schemas/DriveRole"},{"type":"null"}]}},"type":"object","required":["transcription_model"],"title":"WorkspaceSettings"},"TranscriptionModelType":{"type":"string","enum":["BEST","NANO"],"title":"TranscriptionModelType"},"DriveRole":{"type":"integer","enum":[50,40,30,20,17,15,10,0],"title":"DriveRole"},"OrganizationDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"url_subdomain":{"type":"string","title":"Url Subdomain"},"email_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email Domain"},"client_metadata":{"additionalProperties":true,"type":"object","title":"Client Metadata"},"partnership_type":{"anyOf":[{"$ref":"#/components/schemas/PartnershipType"},{"type":"null"}]},"discount_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Discount Amount"}},"type":"object","required":["id","name","url_subdomain","email_domain","client_metadata","partnership_type","discount_amount"],"title":"OrganizationDTO"},"PartnershipType":{"type":"string","enum":["BRANDING","DISCOUNT","CONTRACT"],"title":"PartnershipType"},"InviteType":{"type":"string","enum":["drive","workspace","item"],"title":"InviteType"},"InviteTarget":{"type":"string","enum":["user","anyone"],"title":"InviteTarget"},"DriveInviteDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"sent_by":{"anyOf":[{"$ref":"#/components/schemas/UserDTOBase"},{"type":"null"}]},"sent_by_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Sent By Id"},"sent_to_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sent To Email"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"drive":{"$ref":"#/components/schemas/DriveDTO"},"drive_role":{"$ref":"#/components/schemas/DriveRole"},"workspace_id":{"type":"string","format":"uuid","title":"Workspace Id"},"workspace":{"$ref":"#/components/schemas/WorkspaceDTO"},"invite_type":{"$ref":"#/components/schemas/InviteType"},"invite_target":{"$ref":"#/components/schemas/InviteTarget"}},"type":"object","required":["id","sent_by","sent_by_id","sent_to_email","drive_id","drive","drive_role","workspace_id","workspace","invite_type","invite_target"],"title":"DriveInviteDTO"},"DriveDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"icon":{"type":"string","title":"Icon"},"settings":{"$ref":"#/components/schemas/DriveSettings"},"type":{"$ref":"#/components/schemas/DriveType"},"identifier":{"type":"string","title":"Identifier"},"icon_type":{"$ref":"#/components/schemas/DriveIconType"},"member_inherited_role":{"$ref":"#/components/schemas/DriveRole"},"invite_id":{"type":"string","format":"uuid","title":"Invite Id"},"workspace_id":{"type":"string","format":"uuid","title":"Workspace Id"},"byos":{"anyOf":[{"$ref":"#/components/schemas/DriveByosData"},{"type":"null"}]},"default_storage_backend":{"anyOf":[{"$ref":"#/components/schemas/DriveDefaultStorageBackend"},{"type":"null"}]}},"type":"object","required":["id","name","description","icon","settings","type","identifier","icon_type","member_inherited_role","invite_id","workspace_id","byos","default_storage_backend"],"title":"DriveDTO"},"DriveSettings":{"properties":{"max_storage_bytes":{"type":"integer","title":"Max Storage Bytes"},"mount_path_macos":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Macos"},"mount_path_linux":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Linux"},"mount_path_windows":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Windows"}},"type":"object","required":["max_storage_bytes"],"title":"DriveSettings"},"DriveType":{"type":"string","enum":["catalog","magic","vault"],"title":"DriveType"},"DriveIconType":{"type":"string","enum":["color","emoji","attachment"],"title":"DriveIconType"},"DriveByosData":{"properties":{"bucket":{"type":"string","title":"Bucket"},"endpoint":{"type":"string","title":"Endpoint"}},"type":"object","required":["bucket","endpoint"],"title":"DriveByosData"},"DriveDefaultStorageBackend":{"properties":{"provider":{"type":"string","title":"Provider"},"bucket":{"type":"string","title":"Bucket"}},"type":"object","required":["provider","bucket"],"title":"DriveDefaultStorageBackend"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Accepts invitation

> This is a PUBLIC route where anyone can accept invites.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/invites/{invite_id}/join":{"post":{"tags":["workspaces"],"summary":"Accepts invitation","description":"This is a PUBLIC route where anyone can accept invites.","operationId":"join_invite_workspaces_invites__invite_id__join_post","parameters":[{"name":"invite_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The invite id","description":"The id of the invitation to join"},"description":"The id of the invitation to join"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_join_invite_workspaces_invites__invite_id__join_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/WorkspaceInviteDTO"},{"$ref":"#/components/schemas/DriveInviteDTO"},{"type":"null"}],"title":"Response Join Invite Workspaces Invites  Invite Id  Join Post"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_join_invite_workspaces_invites__invite_id__join_post":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_join_invite_workspaces_invites__invite_id__join_post"},"WorkspaceInviteDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"sent_by":{"anyOf":[{"$ref":"#/components/schemas/UserDTOBase"},{"type":"null"}]},"sent_by_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Sent By Id"},"sent_to_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sent To Email"},"workspace_id":{"type":"string","format":"uuid","title":"Workspace Id"},"workspace":{"$ref":"#/components/schemas/WorkspaceDTO"},"workspace_role":{"$ref":"#/components/schemas/WorkspaceRole"},"invite_type":{"$ref":"#/components/schemas/InviteType"},"invite_target":{"$ref":"#/components/schemas/InviteTarget"}},"type":"object","required":["id","sent_by","sent_by_id","sent_to_email","workspace_id","workspace","workspace_role","invite_type","invite_target"],"title":"WorkspaceInviteDTO"},"UserDTOBase":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"avatar_url":{"type":"string","title":"Avatar Url"},"user_type":{"$ref":"#/components/schemas/UserType"}},"type":"object","required":["id","name","email","avatar_url","user_type"],"title":"UserDTOBase"},"UserType":{"type":"string","enum":["regular","group"],"title":"UserType"},"WorkspaceDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"domain":{"type":"string","title":"Domain"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"member_inherited_role":{"$ref":"#/components/schemas/WorkspaceRole"},"invite_id":{"type":"string","format":"uuid","title":"Invite Id"},"type":{"$ref":"#/components/schemas/WorkspaceType"},"onboarding":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Onboarding"},"settings":{"$ref":"#/components/schemas/WorkspaceSettings"},"trial_started":{"type":"boolean","title":"Trial Started"},"organization":{"anyOf":[{"$ref":"#/components/schemas/OrganizationDTO"},{"type":"null"}]},"client_metadata":{"additionalProperties":true,"type":"object","title":"Client Metadata"}},"type":"object","required":["id","name","description","domain","thumbnail","member_inherited_role","invite_id","type","onboarding","settings","trial_started","organization","client_metadata"],"title":"WorkspaceDTO"},"WorkspaceRole":{"type":"integer","enum":[60,50,30,20,15,10],"title":"WorkspaceRole"},"WorkspaceType":{"type":"string","enum":["PERSONAL","TEAM"],"title":"WorkspaceType"},"WorkspaceSettings":{"properties":{"transcription_model":{"$ref":"#/components/schemas/TranscriptionModelType"},"default_drive_inheritance":{"anyOf":[{"$ref":"#/components/schemas/DriveRole"},{"type":"null"}]}},"type":"object","required":["transcription_model"],"title":"WorkspaceSettings"},"TranscriptionModelType":{"type":"string","enum":["BEST","NANO"],"title":"TranscriptionModelType"},"DriveRole":{"type":"integer","enum":[50,40,30,20,17,15,10,0],"title":"DriveRole"},"OrganizationDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"url_subdomain":{"type":"string","title":"Url Subdomain"},"email_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email Domain"},"client_metadata":{"additionalProperties":true,"type":"object","title":"Client Metadata"},"partnership_type":{"anyOf":[{"$ref":"#/components/schemas/PartnershipType"},{"type":"null"}]},"discount_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Discount Amount"}},"type":"object","required":["id","name","url_subdomain","email_domain","client_metadata","partnership_type","discount_amount"],"title":"OrganizationDTO"},"PartnershipType":{"type":"string","enum":["BRANDING","DISCOUNT","CONTRACT"],"title":"PartnershipType"},"InviteType":{"type":"string","enum":["drive","workspace","item"],"title":"InviteType"},"InviteTarget":{"type":"string","enum":["user","anyone"],"title":"InviteTarget"},"DriveInviteDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"sent_by":{"anyOf":[{"$ref":"#/components/schemas/UserDTOBase"},{"type":"null"}]},"sent_by_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Sent By Id"},"sent_to_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sent To Email"},"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"drive":{"$ref":"#/components/schemas/DriveDTO"},"drive_role":{"$ref":"#/components/schemas/DriveRole"},"workspace_id":{"type":"string","format":"uuid","title":"Workspace Id"},"workspace":{"$ref":"#/components/schemas/WorkspaceDTO"},"invite_type":{"$ref":"#/components/schemas/InviteType"},"invite_target":{"$ref":"#/components/schemas/InviteTarget"}},"type":"object","required":["id","sent_by","sent_by_id","sent_to_email","drive_id","drive","drive_role","workspace_id","workspace","invite_type","invite_target"],"title":"DriveInviteDTO"},"DriveDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"icon":{"type":"string","title":"Icon"},"settings":{"$ref":"#/components/schemas/DriveSettings"},"type":{"$ref":"#/components/schemas/DriveType"},"identifier":{"type":"string","title":"Identifier"},"icon_type":{"$ref":"#/components/schemas/DriveIconType"},"member_inherited_role":{"$ref":"#/components/schemas/DriveRole"},"invite_id":{"type":"string","format":"uuid","title":"Invite Id"},"workspace_id":{"type":"string","format":"uuid","title":"Workspace Id"},"byos":{"anyOf":[{"$ref":"#/components/schemas/DriveByosData"},{"type":"null"}]},"default_storage_backend":{"anyOf":[{"$ref":"#/components/schemas/DriveDefaultStorageBackend"},{"type":"null"}]}},"type":"object","required":["id","name","description","icon","settings","type","identifier","icon_type","member_inherited_role","invite_id","workspace_id","byos","default_storage_backend"],"title":"DriveDTO"},"DriveSettings":{"properties":{"max_storage_bytes":{"type":"integer","title":"Max Storage Bytes"},"mount_path_macos":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Macos"},"mount_path_linux":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Linux"},"mount_path_windows":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Windows"}},"type":"object","required":["max_storage_bytes"],"title":"DriveSettings"},"DriveType":{"type":"string","enum":["catalog","magic","vault"],"title":"DriveType"},"DriveIconType":{"type":"string","enum":["color","emoji","attachment"],"title":"DriveIconType"},"DriveByosData":{"properties":{"bucket":{"type":"string","title":"Bucket"},"endpoint":{"type":"string","title":"Endpoint"}},"type":"object","required":["bucket","endpoint"],"title":"DriveByosData"},"DriveDefaultStorageBackend":{"properties":{"provider":{"type":"string","title":"Provider"},"bucket":{"type":"string","title":"Bucket"}},"type":"object","required":["provider","bucket"],"title":"DriveDefaultStorageBackend"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## PUT /workspaces/{workspace\_id}/users/{user\_id}

> Updates people's permissions on a workspace

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/{workspace_id}/users/{user_id}":{"put":{"tags":["workspaces"],"summary":"Updates people's permissions on a workspace","operationId":"update_workspace_permissions_workspaces__workspace_id__users__user_id__put","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The workspace id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The user id to update"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_update_workspace_permissions_workspaces__workspace_id__users__user_id__put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_update_workspace_permissions_workspaces__workspace_id__users__user_id__put":{"properties":{"role":{"$ref":"#/components/schemas/WorkspaceRole","title":"The role to update"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["role"],"title":"Body_update_workspace_permissions_workspaces__workspace_id__users__user_id__put"},"WorkspaceRole":{"type":"integer","enum":[60,50,30,20,15,10],"title":"WorkspaceRole"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## DELETE /workspaces/{workspace\_id}/users/{user\_id\_to\_remove}

> Removes a user from a workspace

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/{workspace_id}/users/{user_id_to_remove}":{"delete":{"tags":["workspaces"],"summary":"Removes a user from a workspace","operationId":"remove_user_from_workspace_route_workspaces__workspace_id__users__user_id_to_remove__delete","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workspace id","description":"The id of the workspace we want to deactivate the user in"},"description":"The id of the workspace we want to deactivate the user in"},{"name":"user_id_to_remove","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The user id","description":"The id for the user we want to deactivate"},"description":"The id for the user we want to deactivate"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_remove_user_from_workspace_route_workspaces__workspace_id__users__user_id_to_remove__delete"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"boolean","title":"Response Remove User From Workspace Route Workspaces  Workspace Id  Users  User Id To Remove  Delete"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_remove_user_from_workspace_route_workspaces__workspace_id__users__user_id_to_remove__delete":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_remove_user_from_workspace_route_workspaces__workspace_id__users__user_id_to_remove__delete"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## GET /workspaces/{workspace\_domain}/domain

> Gets a workspace for workspace domain

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/{workspace_domain}/domain":{"get":{"tags":["workspaces"],"summary":"Gets a workspace for workspace domain","operationId":"get_workspace_id_from_domain_workspaces__workspace_domain__domain_get","parameters":[{"name":"workspace_domain","in":"path","required":true,"schema":{"type":"string","title":"The workspace id or domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"string","format":"uuid","title":"Response Get Workspace Id From Domain Workspaces  Workspace Domain  Domain Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## GET /workspaces/{workspace\_domain}/drives/{drive\_identifier}/identifier

> Gets a drive\_id from an identifier

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/{workspace_domain}/drives/{drive_identifier}/identifier":{"get":{"tags":["workspaces"],"summary":"Gets a drive_id from an identifier","operationId":"get_drive_id_from_identifier_workspaces__workspace_domain__drives__drive_identifier__identifier_get","parameters":[{"name":"drive_identifier","in":"path","required":true,"schema":{"type":"string","title":"The drive identifier"}},{"name":"workspace_domain","in":"path","required":true,"schema":{"type":"string","title":"The workspace id or domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"string","format":"uuid","title":"Response Get Drive Id From Identifier Workspaces  Workspace Domain  Drives  Drive Identifier  Identifier Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get share data

> Return the contents of the folder -> an array of AssetDTO

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/shares/{share_id}":{"get":{"tags":["workspaces"],"summary":"Get share data","description":"Return the contents of the folder -> an array of AssetDTO","operationId":"get_items_from_share_id_workspaces_shares__share_id__get","parameters":[{"name":"path","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path under share","description":"The path under the share to get the data for"},"description":"The path under the share to get the data for"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_items_from_share_id_workspaces_shares__share_id__get"}}}},"responses":{"200":{"description":"Share data includes drive_id, role, actions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishDataDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_items_from_share_id_workspaces_shares__share_id__get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_items_from_share_id_workspaces_shares__share_id__get"},"PublishDataDTO":{"properties":{"drive_id":{"type":"string","format":"uuid","title":"Drive Id"},"workspace_id":{"type":"string","format":"uuid","title":"Workspace Id"},"role":{"$ref":"#/components/schemas/DriveRole"},"actions":{"items":{"$ref":"#/components/schemas/Action"},"type":"array","title":"Actions"},"is_file":{"type":"boolean","title":"Is File","default":false},"is_folder":{"type":"boolean","title":"Is Folder","default":false},"root_path":{"type":"string","title":"Root Path"},"path":{"type":"string","title":"Path"},"preview_image_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Preview Image Id"},"preview_video_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Preview Video Id"},"password_protected":{"type":"boolean","title":"Password Protected","default":false}},"type":"object","title":"PublishDataDTO"},"DriveRole":{"type":"integer","enum":[50,40,30,20,17,15,10,0],"title":"DriveRole"},"Action":{"type":"string","enum":["manage","edit","share","comment","edit_metadata","download","read","read_asset_details","read_metadata","manage_webhooks","manage_drive","view_stack_versions"],"title":"Action"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## GET /workspaces/authorize/drives/{drive\_id}/{action}

> Authorize drive usage

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/authorize/drives/{drive_id}/{action}":{"get":{"tags":["workspaces"],"summary":"Authorize drive usage","operationId":"cloud_authorize_drive_workspaces_authorize_drives__drive_id___action__get","parameters":[{"name":"action","in":"path","required":true,"schema":{"$ref":"#/components/schemas/Action","title":"The action we want to authorize"}},{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_cloud_authorize_drive_workspaces_authorize_drives__drive_id___action__get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DriveDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Action":{"type":"string","enum":["manage","edit","share","comment","edit_metadata","download","read","read_asset_details","read_metadata","manage_webhooks","manage_drive","view_stack_versions"],"title":"Action"},"Body_cloud_authorize_drive_workspaces_authorize_drives__drive_id___action__get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_cloud_authorize_drive_workspaces_authorize_drives__drive_id___action__get"},"DriveDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"icon":{"type":"string","title":"Icon"},"settings":{"$ref":"#/components/schemas/DriveSettings"},"type":{"$ref":"#/components/schemas/DriveType"},"identifier":{"type":"string","title":"Identifier"},"icon_type":{"$ref":"#/components/schemas/DriveIconType"},"member_inherited_role":{"$ref":"#/components/schemas/DriveRole"},"invite_id":{"type":"string","format":"uuid","title":"Invite Id"},"workspace_id":{"type":"string","format":"uuid","title":"Workspace Id"},"byos":{"anyOf":[{"$ref":"#/components/schemas/DriveByosData"},{"type":"null"}]},"default_storage_backend":{"anyOf":[{"$ref":"#/components/schemas/DriveDefaultStorageBackend"},{"type":"null"}]}},"type":"object","required":["id","name","description","icon","settings","type","identifier","icon_type","member_inherited_role","invite_id","workspace_id","byos","default_storage_backend"],"title":"DriveDTO"},"DriveSettings":{"properties":{"max_storage_bytes":{"type":"integer","title":"Max Storage Bytes"},"mount_path_macos":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Macos"},"mount_path_linux":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Linux"},"mount_path_windows":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mount Path Windows"}},"type":"object","required":["max_storage_bytes"],"title":"DriveSettings"},"DriveType":{"type":"string","enum":["catalog","magic","vault"],"title":"DriveType"},"DriveIconType":{"type":"string","enum":["color","emoji","attachment"],"title":"DriveIconType"},"DriveRole":{"type":"integer","enum":[50,40,30,20,17,15,10,0],"title":"DriveRole"},"DriveByosData":{"properties":{"bucket":{"type":"string","title":"Bucket"},"endpoint":{"type":"string","title":"Endpoint"}},"type":"object","required":["bucket","endpoint"],"title":"DriveByosData"},"DriveDefaultStorageBackend":{"properties":{"provider":{"type":"string","title":"Provider"},"bucket":{"type":"string","title":"Bucket"}},"type":"object","required":["provider","bucket"],"title":"DriveDefaultStorageBackend"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## PUT /workspaces/{workspace\_id}/settings

> Update workspace settings

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/{workspace_id}/settings":{"put":{"tags":["workspaces"],"summary":"Update workspace settings","operationId":"set_workspace_transcription_model_workspaces__workspace_id__settings_put","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The workspace id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_set_workspace_transcription_model_workspaces__workspace_id__settings_put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_set_workspace_transcription_model_workspaces__workspace_id__settings_put":{"properties":{"transcription_model":{"anyOf":[{"$ref":"#/components/schemas/TranscriptionModelType"},{"type":"null"}],"title":"The transcription model","description":"New model to set it to"},"default_drive_inheritance":{"anyOf":[{"$ref":"#/components/schemas/DriveRole"},{"type":"null"}],"title":"The default drive inheritance","description":"Default access level for workspace members in new drives"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_set_workspace_transcription_model_workspaces__workspace_id__settings_put"},"TranscriptionModelType":{"type":"string","enum":["BEST","NANO"],"title":"TranscriptionModelType"},"DriveRole":{"type":"integer","enum":[50,40,30,20,17,15,10,0],"title":"DriveRole"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## GET /workspaces/shade-fs-public-key

> Get the FS public key to sign files

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/shade-fs-public-key":{"get":{"tags":["workspaces"],"summary":"Get the FS public key to sign files","operationId":"get_shade_fs_public_key_workspaces_shade_fs_public_key_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}},"404":{"description":"Not found"}}}}}}
```

## POST /workspaces/{workspace\_id}/transfer-ownership/{new\_owner\_user\_id}

> Transfer a workspace to a new owner

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/{workspace_id}/transfer-ownership/{new_owner_user_id}":{"post":{"tags":["workspaces"],"summary":"Transfer a workspace to a new owner","operationId":"transfer_workspace_ownership_route_workspaces__workspace_id__transfer_ownership__new_owner_user_id__post","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The workspace id"}},{"name":"new_owner_user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The user to transfer workspace ownership to"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_transfer_workspace_ownership_route_workspaces__workspace_id__transfer_ownership__new_owner_user_id__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"boolean","title":"Response Transfer Workspace Ownership Route Workspaces  Workspace Id  Transfer Ownership  New Owner User Id  Post"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_transfer_workspace_ownership_route_workspaces__workspace_id__transfer_ownership__new_owner_user_id__post":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_transfer_workspace_ownership_route_workspaces__workspace_id__transfer_ownership__new_owner_user_id__post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## POST /workspaces/{workspace\_id}/leave

> Leave a workspace

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/{workspace_id}/leave":{"post":{"tags":["workspaces"],"summary":"Leave a workspace","operationId":"leave_workspace_route_workspaces__workspace_id__leave_post","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The workspace id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_leave_workspace_route_workspaces__workspace_id__leave_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"boolean","title":"Response Leave Workspace Route Workspaces  Workspace Id  Leave Post"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_leave_workspace_route_workspaces__workspace_id__leave_post":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_leave_workspace_route_workspaces__workspace_id__leave_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## POST /workspaces/public-file-shares/{share\_id}/email

> Invite a user to a public share

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/public-file-shares/{share_id}/email":{"post":{"tags":["workspaces"],"summary":"Invite a user to a public share","operationId":"invite_user_to_public_file_share_workspaces_public_file_shares__share_id__email_post","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_invite_user_to_public_file_share_workspaces_public_file_shares__share_id__email_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_invite_user_to_public_file_share_workspaces_public_file_shares__share_id__email_post":{"properties":{"email":{"type":"string","title":"The email of the user to invite"},"message":{"type":"string","title":"The message to send to the user"},"link":{"type":"string","title":"The link to the public share"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["email","message","link"],"title":"Body_invite_user_to_public_file_share_workspaces_public_file_shares__share_id__email_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get Svix webhook dashboard URL for workspace

> Generate and return a Svix dashboard URL for the workspace webhooks.\
> User must be an admin, member, or owner of the workspace.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/{workspace_id}/webhook-dashboard-url":{"get":{"tags":["workspaces"],"summary":"Get Svix webhook dashboard URL for workspace","description":"Generate and return a Svix dashboard URL for the workspace webhooks.\nUser must be an admin, member, or owner of the workspace.","operationId":"get_webhook_dashboard_url_workspaces__workspace_id__webhook_dashboard_url_get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The workspace id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_webhook_dashboard_url_workspaces__workspace_id__webhook_dashboard_url_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Webhook Dashboard Url Workspaces  Workspace Id  Webhook Dashboard Url Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_webhook_dashboard_url_workspaces__workspace_id__webhook_dashboard_url_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_webhook_dashboard_url_workspaces__workspace_id__webhook_dashboard_url_get"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get Svix webhook zapier integration key for workspace

> Generate and return a Svix dashboard URL for the workspace webhooks.\
> User must be an admin, member, or owner of the workspace.

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/workspaces/{workspace_id}/zapier-integration-key":{"get":{"tags":["workspaces"],"summary":"Get Svix webhook zapier integration key for workspace","description":"Generate and return a Svix dashboard URL for the workspace webhooks.\nUser must be an admin, member, or owner of the workspace.","operationId":"get_zapier_integration_key_workspaces__workspace_id__zapier_integration_key_get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The workspace id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_zapier_integration_key_workspaces__workspace_id__zapier_integration_key_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zapier Integration Key Workspaces  Workspace Id  Zapier Integration Key Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_zapier_integration_key_workspaces__workspace_id__zapier_integration_key_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_zapier_integration_key_workspaces__workspace_id__zapier_integration_key_get"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```


# Billing

## Gets the usage of a workspace

> Get the usage data for a workspace

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/billing/{workspace_id}/workspace-usage":{"get":{"tags":["billing"],"summary":"Gets the usage of a workspace","description":"Get the usage data for a workspace","operationId":"get_workspace_usage_full_billing__workspace_id__workspace_usage_get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workspace ID","description":"The ID of the workspace to get usage data for"},"description":"The ID of the workspace to get usage data for"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_workspace_usage_full_billing__workspace_id__workspace_usage_get"}}}},"responses":{"200":{"description":"The usage of the workspace","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/FullWorkspaceUsageDTO"},{"type":"null"}],"title":"Response Get Workspace Usage Full Billing  Workspace Id  Workspace Usage Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_workspace_usage_full_billing__workspace_id__workspace_usage_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_workspace_usage_full_billing__workspace_id__workspace_usage_get"},"FullWorkspaceUsageDTO":{"properties":{"seats":{"$ref":"#/components/schemas/UsageMetric"},"guests":{"$ref":"#/components/schemas/UsageMetric"},"has_payment_method":{"type":"boolean","title":"Has Payment Method"},"cloud_storage":{"$ref":"#/components/schemas/StorageMetric"},"byo_storage":{"$ref":"#/components/schemas/StorageMetric"},"vault_storage":{"$ref":"#/components/schemas/StorageMetric"},"vault_byo_storage":{"$ref":"#/components/schemas/StorageMetric"},"high_speed_storage":{"$ref":"#/components/schemas/StorageMetric"},"drives":{"$ref":"#/components/schemas/UsageMetric"},"ai_indexed_items":{"$ref":"#/components/schemas/UsageMetric"},"cloud_drives":{"items":{"$ref":"#/components/schemas/DriveWithStorage"},"type":"array","title":"Cloud Drives"},"byo_drives":{"items":{"$ref":"#/components/schemas/DriveWithStorage"},"type":"array","title":"Byo Drives"},"vault_drives":{"items":{"$ref":"#/components/schemas/DriveWithStorage"},"type":"array","title":"Vault Drives"},"vault_byo_drives":{"items":{"$ref":"#/components/schemas/DriveWithStorage"},"type":"array","title":"Vault Byo Drives"},"high_speed_drives":{"items":{"$ref":"#/components/schemas/DriveWithStorage"},"type":"array","title":"High Speed Drives"},"monthly_subscription_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Monthly Subscription Status"},"annual_subscription_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Annual Subscription Status"},"credits":{"type":"integer","title":"Credits"}},"type":"object","required":["seats","guests","has_payment_method","cloud_storage","byo_storage","vault_storage","vault_byo_storage","high_speed_storage","drives","ai_indexed_items","cloud_drives","byo_drives","vault_drives","vault_byo_drives","high_speed_drives","monthly_subscription_status","annual_subscription_status","credits"],"title":"FullWorkspaceUsageDTO"},"UsageMetric":{"properties":{"used":{"anyOf":[{"type":"integer"},{"type":"number"}],"title":"Used"},"included":{"anyOf":[{"type":"integer"},{"type":"number"}],"title":"Included"},"enforced":{"type":"boolean","title":"Enforced","default":true}},"type":"object","required":["used","included"],"title":"UsageMetric"},"StorageMetric":{"properties":{"free":{"anyOf":[{"type":"integer"},{"type":"number"}],"title":"Free"},"paid":{"anyOf":[{"type":"integer"},{"type":"number"}],"title":"Paid"},"used":{"anyOf":[{"type":"integer"},{"type":"number"}],"title":"Used"}},"type":"object","required":["free","paid","used"],"title":"StorageMetric"},"DriveWithStorage":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"usage":{"type":"number","title":"Usage"}},"type":"object","required":["id","name","usage"],"title":"DriveWithStorage"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Gets the usage of a drive

> Get the usage data for a drive

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/billing/{drive_id}/drive-usage":{"get":{"tags":["billing"],"summary":"Gets the usage of a drive","description":"Get the usage data for a drive","operationId":"get_drive_full_usage_billing__drive_id__drive_usage_get","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Drive ID","description":"The ID of the drive to get usage data for"},"description":"The ID of the drive to get usage data for"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_drive_full_usage_billing__drive_id__drive_usage_get"}}}},"responses":{"200":{"description":"The usage of the drive","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DriveUsage"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_drive_full_usage_billing__drive_id__drive_usage_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_drive_full_usage_billing__drive_id__drive_usage_get"},"DriveUsage":{"properties":{"types":{"items":{"$ref":"#/components/schemas/AssetTypeUsage"},"type":"array","title":"Types"},"usage":{"type":"number","title":"Usage"},"total_storage":{"type":"number","title":"Total Storage"},"total_items":{"type":"integer","title":"Total Items"}},"type":"object","required":["types","usage","total_storage","total_items"],"title":"DriveUsage"},"AssetTypeUsage":{"properties":{"type":{"$ref":"#/components/schemas/AssetType"},"count":{"type":"integer","title":"Count"},"size":{"type":"number","title":"Size"}},"type":"object","required":["type","count","size"],"title":"AssetTypeUsage"},"AssetType":{"type":"string","enum":["IMAGE","VIDEO","AUDIO","DOCUMENT","HDR","HDRI","PHOTOSHOP","ILLUSTRATOR","EXR","OBJECT","VECTOR","OTHER","MAYA","MAX","BLENDER","HOUDINI","UNREAL","UNITY","AFTER_EFFECTS","MOGRT"],"title":"AssetType"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Gets the usage of a workspace

> Get the usage data for a workspace

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/billing/{workspace_id}/usage":{"get":{"tags":["billing"],"summary":"Gets the usage of a workspace","description":"Get the usage data for a workspace","operationId":"get_workspace_usage_billing__workspace_id__usage_get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workspace ID","description":"The ID of the workspace to get usage data for"},"description":"The ID of the workspace to get usage data for"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_workspace_usage_billing__workspace_id__usage_get"}}}},"responses":{"200":{"description":"The usage of the workspace","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/WorkspaceUsageDTO"},{"type":"null"}],"title":"Response Get Workspace Usage Billing  Workspace Id  Usage Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_workspace_usage_billing__workspace_id__usage_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_workspace_usage_billing__workspace_id__usage_get"},"WorkspaceUsageDTO":{"properties":{"billing":{"$ref":"#/components/schemas/WorkspaceBillingDTO"},"plan":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan"},"plan_name":{"type":"string","title":"Plan Name"},"seats_annual":{"type":"boolean","title":"Seats Annual"},"is_trial":{"type":"boolean","title":"Is Trial"},"seats":{"type":"integer","title":"Seats"}},"type":"object","required":["billing","plan","plan_name","seats_annual","is_trial","seats"],"title":"WorkspaceUsageDTO"},"WorkspaceBillingDTO":{"properties":{"start_time":{"type":"integer","title":"Start Time"},"end_time":{"type":"integer","title":"End Time"},"total_cloud_paid":{"type":"number","title":"Total Cloud Paid"},"total_vault_paid":{"type":"number","title":"Total Vault Paid"},"total_byo_paid":{"type":"number","title":"Total Byo Paid"},"total_vault_byo_paid":{"type":"number","title":"Total Vault Byo Paid"},"total_high_speed_paid":{"type":"number","title":"Total High Speed Paid"},"total_cloud_free":{"type":"number","title":"Total Cloud Free"},"total_vault_free":{"type":"number","title":"Total Vault Free"},"total_byo_free":{"type":"number","title":"Total Byo Free"},"cloud_overage":{"type":"number","title":"Cloud Overage"},"byo_overage":{"type":"number","title":"Byo Overage"},"vault_storage_overage":{"type":"number","title":"Vault Storage Overage"},"vault_byo_storage_overage":{"type":"number","title":"Vault Byo Storage Overage"},"high_speed_storage_overage":{"type":"number","title":"High Speed Storage Overage"}},"type":"object","required":["start_time","end_time","total_cloud_paid","total_vault_paid","total_byo_paid","total_vault_byo_paid","total_high_speed_paid","total_cloud_free","total_vault_free","total_byo_free","cloud_overage","byo_overage","vault_storage_overage","vault_byo_storage_overage","high_speed_storage_overage"],"title":"WorkspaceBillingDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Gets the invoices for a workspace

> Get the invoices for a workspace

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/billing/{workspace_id}/invoices":{"get":{"tags":["billing"],"summary":"Gets the invoices for a workspace","description":"Get the invoices for a workspace","operationId":"get_workspace_invoices_billing__workspace_id__invoices_get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workspace ID","description":"The ID of the workspace to get invoices for"},"description":"The ID of the workspace to get invoices for"},{"name":"upcoming","in":"query","required":false,"schema":{"type":"boolean","title":"Upcoming","description":"Whether to get the upcoming invoice","default":false},"description":"Whether to get the upcoming invoice"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_workspace_invoices_billing__workspace_id__invoices_get"}}}},"responses":{"200":{"description":"The invoices of the workspace","content":{"application/json":{"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/WorkspaceInvoiceDTO"}},{"type":"null"}],"title":"Response Get Workspace Invoices Billing  Workspace Id  Invoices Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_workspace_invoices_billing__workspace_id__invoices_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_workspace_invoices_billing__workspace_id__invoices_get"},"WorkspaceInvoiceDTO":{"properties":{"total_amount_due":{"type":"number","title":"Total Amount Due"},"period_start":{"type":"integer","title":"Period Start"},"period_end":{"type":"integer","title":"Period End"},"invoice_date":{"type":"integer","title":"Invoice Date"},"paid":{"type":"boolean","title":"Paid"},"invoice_pdf":{"type":"string","title":"Invoice Pdf"},"hosted_invoice_url":{"type":"string","title":"Hosted Invoice Url"},"tax":{"type":"number","title":"Tax"},"subtotal":{"type":"number","title":"Subtotal"},"lines":{"items":{"$ref":"#/components/schemas/LineItemDTO"},"type":"array","title":"Lines"},"status":{"type":"string","title":"Status"},"currency":{"type":"string","title":"Currency"}},"type":"object","required":["total_amount_due","period_start","period_end","invoice_date","paid","invoice_pdf","hosted_invoice_url","tax","subtotal","lines","status","currency"],"title":"WorkspaceInvoiceDTO"},"LineItemDTO":{"properties":{"description":{"type":"string","title":"Description"},"amount":{"type":"number","title":"Amount"},"quantity":{"type":"number","title":"Quantity"},"unit_type":{"type":"string","title":"Unit Type"},"unit_amount":{"type":"number","title":"Unit Amount"}},"type":"object","required":["description","amount","quantity","unit_type","unit_amount"],"title":"LineItemDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Update Payment Method

> Update the payment method for a workspace

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/billing/{workspace_id}/payment-method":{"put":{"tags":["billing"],"summary":"Update Payment Method","description":"Update the payment method for a workspace","operationId":"update_payment_method_billing__workspace_id__payment_method_put","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workspace ID","description":"The ID of the workspace to update the payment method for"},"description":"The ID of the workspace to update the payment method for"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_update_payment_method_billing__workspace_id__payment_method_put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"type":"object","additionalProperties":{"type":"string"}},{"type":"null"}],"title":"Response Update Payment Method Billing  Workspace Id  Payment Method Put"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_update_payment_method_billing__workspace_id__payment_method_put":{"properties":{"payment_method_id":{"type":"string","title":"Payment Method ID","description":"The ID of the payment method to update to"},"is_first":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"The first added payment method","description":"Whether this is the first added payment method (not updated later on)","default":false},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["payment_method_id"],"title":"Body_update_payment_method_billing__workspace_id__payment_method_put"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Update Billing Address

> Update the billing address for a workspace

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/billing/{workspace_id}/billing-address":{"put":{"tags":["billing"],"summary":"Update Billing Address","description":"Update the billing address for a workspace","operationId":"update_billing_address_billing__workspace_id__billing_address_put","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workspace ID","description":"The ID of the workspace to update the billing address for"},"description":"The ID of the workspace to update the billing address for"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_update_billing_address_billing__workspace_id__billing_address_put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_update_billing_address_billing__workspace_id__billing_address_put":{"properties":{"address":{"$ref":"#/components/schemas/AddressDTO","title":"Address","description":"The address to update the billing address to"},"payment_method_id":{"type":"string","title":"Payment Method ID","description":"The ID of the payment method to update to"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["address","payment_method_id"],"title":"Body_update_billing_address_billing__workspace_id__billing_address_put"},"AddressDTO":{"properties":{"name":{"type":"string","title":"Name"},"phone":{"type":"string","title":"Phone"},"address":{"$ref":"#/components/schemas/Address"}},"type":"object","required":["name","phone","address"],"title":"AddressDTO"},"Address":{"properties":{"line1":{"type":"string","title":"Line1"},"line2":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Line2"},"city":{"type":"string","title":"City"},"state":{"type":"string","title":"State"},"postal_code":{"type":"string","title":"Postal Code"},"country":{"type":"string","title":"Country"}},"type":"object","required":["line1","line2","city","state","postal_code","country"],"title":"Address"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get Payment Methods

> Get the payment methods for a workspace

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/billing/{workspace_id}/payment-methods":{"get":{"tags":["billing"],"summary":"Get Payment Methods","description":"Get the payment methods for a workspace","operationId":"get_payment_methods_billing__workspace_id__payment_methods_get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workspace ID","description":"The ID of the workspace to get the payment methods for"},"description":"The ID of the workspace to get the payment methods for"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_payment_methods_billing__workspace_id__payment_methods_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PaymentMethodDTO"},"title":"Response Get Payment Methods Billing  Workspace Id  Payment Methods Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_payment_methods_billing__workspace_id__payment_methods_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_payment_methods_billing__workspace_id__payment_methods_get"},"PaymentMethodDTO":{"properties":{"id":{"type":"string","title":"Id"},"brand":{"type":"string","title":"Brand"},"type":{"type":"string","title":"Type"},"last4":{"type":"string","title":"Last4"},"exp_month":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Exp Month"},"exp_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Exp Year"},"funding":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Funding"},"country":{"type":"string","title":"Country"},"address":{"type":"string","title":"Address"},"city":{"type":"string","title":"City"},"state":{"type":"string","title":"State"},"zip":{"type":"string","title":"Zip"},"name":{"type":"string","title":"Name"}},"type":"object","required":["id","brand","type","last4","exp_month","exp_year","funding","country","address","city","state","zip","name"],"title":"PaymentMethodDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Update Plan

> Update the plan for a workspace

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/billing/{workspace_id}/plan":{"put":{"tags":["billing"],"summary":"Update Plan","description":"Update the plan for a workspace","operationId":"update_plan_billing__workspace_id__plan_put","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workspace ID","description":"The ID of the workspace to update the plan for"},"description":"The ID of the workspace to update the plan for"},{"name":"price_id","in":"query","required":true,"schema":{"type":"string","title":"Price ID","description":"The ID of the price plan to update to"},"description":"The ID of the price plan to update to"},{"name":"seats","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seats","description":"The number of seats to update to"},"description":"The number of seats to update to"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_update_plan_billing__workspace_id__plan_put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_update_plan_billing__workspace_id__plan_put":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_update_plan_billing__workspace_id__plan_put"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get Current Invoice

> Get the current invoice for a workspace

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/billing/{workspace_id}/current-invoice":{"get":{"tags":["billing"],"summary":"Get Current Invoice","description":"Get the current invoice for a workspace","operationId":"get_current_invoice_billing__workspace_id__current_invoice_get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workspace ID","description":"The ID of the workspace to get the current invoice for"},"description":"The ID of the workspace to get the current invoice for"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_current_invoice_billing__workspace_id__current_invoice_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceInvoiceDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_current_invoice_billing__workspace_id__current_invoice_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_current_invoice_billing__workspace_id__current_invoice_get"},"WorkspaceInvoiceDTO":{"properties":{"total_amount_due":{"type":"number","title":"Total Amount Due"},"period_start":{"type":"integer","title":"Period Start"},"period_end":{"type":"integer","title":"Period End"},"invoice_date":{"type":"integer","title":"Invoice Date"},"paid":{"type":"boolean","title":"Paid"},"invoice_pdf":{"type":"string","title":"Invoice Pdf"},"hosted_invoice_url":{"type":"string","title":"Hosted Invoice Url"},"tax":{"type":"number","title":"Tax"},"subtotal":{"type":"number","title":"Subtotal"},"lines":{"items":{"$ref":"#/components/schemas/LineItemDTO"},"type":"array","title":"Lines"},"status":{"type":"string","title":"Status"},"currency":{"type":"string","title":"Currency"}},"type":"object","required":["total_amount_due","period_start","period_end","invoice_date","paid","invoice_pdf","hosted_invoice_url","tax","subtotal","lines","status","currency"],"title":"WorkspaceInvoiceDTO"},"LineItemDTO":{"properties":{"description":{"type":"string","title":"Description"},"amount":{"type":"number","title":"Amount"},"quantity":{"type":"number","title":"Quantity"},"unit_type":{"type":"string","title":"Unit Type"},"unit_amount":{"type":"number","title":"Unit Amount"}},"type":"object","required":["description","amount","quantity","unit_type","unit_amount"],"title":"LineItemDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get Upcoming Monthly Invoice

> Get the upcoming monthly invoice for a workspace

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/billing/{workspace_id}/upcoming-monthly-invoice":{"get":{"tags":["billing"],"summary":"Get Upcoming Monthly Invoice","description":"Get the upcoming monthly invoice for a workspace","operationId":"get_upcoming_monthly_invoice_billing__workspace_id__upcoming_monthly_invoice_get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workspace ID","description":"The ID of the workspace to get the upcoming monthly invoice for"},"description":"The ID of the workspace to get the upcoming monthly invoice for"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_upcoming_monthly_invoice_billing__workspace_id__upcoming_monthly_invoice_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/WorkspaceInvoiceDTO"},{"type":"null"}],"title":"Response Get Upcoming Monthly Invoice Billing  Workspace Id  Upcoming Monthly Invoice Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_upcoming_monthly_invoice_billing__workspace_id__upcoming_monthly_invoice_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_upcoming_monthly_invoice_billing__workspace_id__upcoming_monthly_invoice_get"},"WorkspaceInvoiceDTO":{"properties":{"total_amount_due":{"type":"number","title":"Total Amount Due"},"period_start":{"type":"integer","title":"Period Start"},"period_end":{"type":"integer","title":"Period End"},"invoice_date":{"type":"integer","title":"Invoice Date"},"paid":{"type":"boolean","title":"Paid"},"invoice_pdf":{"type":"string","title":"Invoice Pdf"},"hosted_invoice_url":{"type":"string","title":"Hosted Invoice Url"},"tax":{"type":"number","title":"Tax"},"subtotal":{"type":"number","title":"Subtotal"},"lines":{"items":{"$ref":"#/components/schemas/LineItemDTO"},"type":"array","title":"Lines"},"status":{"type":"string","title":"Status"},"currency":{"type":"string","title":"Currency"}},"type":"object","required":["total_amount_due","period_start","period_end","invoice_date","paid","invoice_pdf","hosted_invoice_url","tax","subtotal","lines","status","currency"],"title":"WorkspaceInvoiceDTO"},"LineItemDTO":{"properties":{"description":{"type":"string","title":"Description"},"amount":{"type":"number","title":"Amount"},"quantity":{"type":"number","title":"Quantity"},"unit_type":{"type":"string","title":"Unit Type"},"unit_amount":{"type":"number","title":"Unit Amount"}},"type":"object","required":["description","amount","quantity","unit_type","unit_amount"],"title":"LineItemDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get Annual Subscriptions

> Get the annual subscriptions for a workspace

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/billing/{workspace_id}/annual-subscriptions":{"get":{"tags":["billing"],"summary":"Get Annual Subscriptions","description":"Get the annual subscriptions for a workspace","operationId":"get_annual_subscriptions_billing__workspace_id__annual_subscriptions_get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workspace ID","description":"The ID of the workspace to get the annual subscriptions for"},"description":"The ID of the workspace to get the annual subscriptions for"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_annual_subscriptions_billing__workspace_id__annual_subscriptions_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_annual_subscriptions_billing__workspace_id__annual_subscriptions_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_annual_subscriptions_billing__workspace_id__annual_subscriptions_get"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Update Billing Email

> Update the billing email for a workspace on stripe

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/billing/{workspace_id}/billing-email":{"put":{"tags":["billing"],"summary":"Update Billing Email","description":"Update the billing email for a workspace on stripe","operationId":"update_billing_email_billing__workspace_id__billing_email_put","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workspace ID","description":"The ID of the workspace to update the billing email for"},"description":"The ID of the workspace to update the billing email for"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_update_billing_email_billing__workspace_id__billing_email_put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_update_billing_email_billing__workspace_id__billing_email_put":{"properties":{"email":{"type":"string","title":"Email","description":"The email to update the billing email to"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["email"],"title":"Body_update_billing_email_billing__workspace_id__billing_email_put"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```


# Indexing

## Check indexing job status for a drive

> Get the indexing job status for a drive

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/indexing/job-status/{drive_id}":{"get":{"tags":["indexing"],"summary":"Check indexing job status for a drive","description":"Get the indexing job status for a drive","operationId":"get_indexing_job_status_indexing_job_status__drive_id__get","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Drive Id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_indexing_job_status_indexing_job_status__drive_id__get"}}}},"responses":{"200":{"description":"The current indexing job status for the drive","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndexingStatusDTO"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_indexing_job_status_indexing_job_status__drive_id__get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_indexing_job_status_indexing_job_status__drive_id__get"},"IndexingStatusDTO":{"properties":{"jobs":{"items":{"$ref":"#/components/schemas/JobsRemainingDTO"},"type":"array","title":"Jobs"}},"type":"object","required":["jobs"],"title":"IndexingStatusDTO","description":"A DTO that shows the indexing status of a drive"},"JobsRemainingDTO":{"properties":{"name":{"$ref":"#/components/schemas/IndexingJobType"},"to_do":{"type":"integer","title":"To Do"}},"type":"object","required":["name","to_do"],"title":"JobsRemainingDTO","description":"A DTO that shows the number of jobs remaining for a specific job type"},"IndexingJobType":{"type":"string","enum":["download","metadata","image_preview","video_preview","complex_preview","document_preview","cpu_proxy","gpu_proxy","proxy","audio_proxy","core_audio","core_vision","color_palette","facial_recognition","custom_metadata","transcription","chunk_video","chunk_document","chunk_image"],"title":"IndexingJobType"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Get the asset roots

> Get the asset roots

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/indexing/roots":{"get":{"tags":["indexing"],"summary":"Get the asset roots","description":"Get the asset roots","operationId":"get_asset_roots_indexing_roots_get","parameters":[{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id","description":"The id of the drive we want to add users to"},"description":"The id of the drive we want to add users to"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_asset_roots_indexing_roots_get"}}}},"responses":{"200":{"description":"The asset roots","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RootDTO"},"title":"Response Get Asset Roots Indexing Roots Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_asset_roots_indexing_roots_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_asset_roots_indexing_roots_get"},"RootDTO":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"path":{"type":"string","title":"Path"},"created":{"type":"string","format":"date-time","title":"Created"},"updated":{"type":"string","format":"date-time","title":"Updated"},"files_found":{"type":"integer","title":"Files Found","default":0},"size_bytes":{"type":"integer","title":"Size Bytes","default":0}},"type":"object","required":["id","path","created","updated"],"title":"RootDTO"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Add asset roots

> Add asset roots

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/indexing/roots":{"post":{"tags":["indexing"],"summary":"Add asset roots","description":"Add asset roots","operationId":"create_roots_indexing_roots_post","parameters":[{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_create_roots_indexing_roots_post"}}}},"responses":{"200":{"description":"The ID of the new root","content":{"application/json":{"schema":{"type":"array","items":{"type":"string","format":"uuid"},"title":"Response Create Roots Indexing Roots Post"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_create_roots_indexing_roots_post":{"properties":{"paths":{"items":{"type":"string","format":"path"},"type":"array","title":"Paths","description":"The paths to add as asset roots"},"drive_id":{"type":"string","format":"uuid","title":"Drive ID","description":"The ID of the drive"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["paths","drive_id"],"title":"Body_create_roots_indexing_roots_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Remove an asset root

> Remove an asset root

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/indexing/roots/{root_id}":{"delete":{"tags":["indexing"],"summary":"Remove an asset root","description":"Remove an asset root","operationId":"delete_root_indexing_roots__root_id__delete","parameters":[{"name":"root_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Root ID","description":"The ID of the root to remove"},"description":"The ID of the root to remove"},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_delete_root_indexing_roots__root_id__delete"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_delete_root_indexing_roots__root_id__delete":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_delete_root_indexing_roots__root_id__delete"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```


# Knock

## POST /knock/token

> Generate a Knock user token for the current user

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/knock/token":{"post":{"tags":["knock"],"summary":"Generate a Knock user token for the current user","operationId":"generate_knock_user_token_knock_token_post","parameters":[{"name":"workspace_id","in":"query","required":false,"schema":{"type":"string","format":"uuid","title":"The workspace id","description":"The id of the workspace"},"description":"The id of the workspace"},{"name":"drive_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"The drive id (optional)","description":"The id of the drive. If provided, generates a token scoped to workspace + this drive only. If omitted, generates a token for workspace + all drives (legacy, avoid with 50+ drives)."},"description":"The id of the drive. If provided, generates a token scoped to workspace + this drive only. If omitted, generates a token for workspace + all drives (legacy, avoid with 50+ drives)."},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_generate_knock_user_token_knock_token_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnockTokenResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_generate_knock_user_token_knock_token_post":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_generate_knock_user_token_knock_token_post"},"KnockTokenResponse":{"properties":{"token":{"type":"string","title":"Token"},"expires_at":{"type":"integer","title":"Expires At"}},"type":"object","required":["token","expires_at"],"title":"KnockTokenResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## GET /knock/drives/{drive\_id}/preferences

> Fetch Knock notification preferences for a drive

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/knock/drives/{drive_id}/preferences":{"get":{"tags":["knock"],"summary":"Fetch Knock notification preferences for a drive","operationId":"get_drive_notification_preferences_knock_drives__drive_id__preferences_get","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_get_drive_notification_preferences_knock_drives__drive_id__preferences_get"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Drive Notification Preferences Knock Drives  Drive Id  Preferences Get"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_get_drive_notification_preferences_knock_drives__drive_id__preferences_get":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","title":"Body_get_drive_notification_preferences_knock_drives__drive_id__preferences_get"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## PUT /knock/drives/{drive\_id}/preferences

> Update Knock notification preferences for a drive

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/knock/drives/{drive_id}/preferences":{"put":{"tags":["knock"],"summary":"Update Knock notification preferences for a drive","operationId":"update_drive_notification_preferences_knock_drives__drive_id__preferences_put","parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"The drive id"}},{"name":"password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"The password","description":"The password header to use to fetch the preview"},"description":"The password header to use to fetch the preview"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_update_drive_notification_preferences_knock_drives__drive_id__preferences_put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Drive Notification Preferences Knock Drives  Drive Id  Preferences Put"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_update_drive_notification_preferences_knock_drives__drive_id__preferences_put":{"properties":{"preferences":{"$ref":"#/components/schemas/KnockPreferenceSetPayload","title":"The preference set"},"body":{"additionalProperties":true,"type":"object","title":"Body","default":{}}},"type":"object","required":["preferences"],"title":"Body_update_drive_notification_preferences_knock_drives__drive_id__preferences_put"},"KnockPreferenceSetPayload":{"properties":{"id":{"type":"string","title":"Id","default":"default"},"workflows":{"additionalProperties":true,"type":"object","title":"Workflows"}},"type":"object","required":["workflows"],"title":"KnockPreferenceSetPayload"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```


# shade

## GET /

> Basic information about using Shade

```json
{"openapi":"3.1.0","info":{"title":"shade","version":"dev"},"paths":{"/":{"get":{"summary":"Basic information about using Shade","operationId":"get_info__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"string","title":"Response Get Info  Get"}}}}}}}}}
```


# What are Workspaces?

Workspaces are shared spaces where you house your drives (which house files and folders). This is where your internal team will have access to all of their media and content.

Putting it another way, a workspace is a collection of drives and a collection of users. This is the “team” where you add users to this team that will be involved in multiple projects.

Users can be added to a workspace with the following permissions:

Members have added benefits of easily managing and accessing a variety of drives, being able to create new drives for themselves and for the team, and invite guests to specific drives or folders.

Workspace admins have flexibility in managing a variety of different drives, including editing associated details, changing locations and more.

### Why do we have workspaces? <a href="#h_4993f6947e" id="h_4993f6947e"></a>

Workspaces allow us to unify users under one team and have multiple drives connected to one workspace. This allows for two things

### What are you billed for? <a href="#h_f1c8bb86c1" id="h_f1c8bb86c1"></a>

You are billed for the total sum of your workspace admins and members in your workspace. This means that any members or admins that are added at the workspace level are a billable seat of Shade. Each plan has a certain # of seats and guests that are enforced during invite.


# Creating a Workspace

Creating a workspace is simple and straightforward. Follow these steps:

### Hit the icon in the top left and select Create or join workspace <a href="#h_7be7152886" id="h_7be7152886"></a>

To get started - click the top left icon and select Create or join workspace

[![Create a workspace by clicking the top left icon](https://downloads.intercomcdn.com/i/o/1084789301/f3a5678d18a15695584f0bdd/Screenshot+2024-06-17+at+3_47_15%E2%80%AFPM.png?expires=1739547900\&signature=fad953159428dc4cce8e09fa7a2728df84b8f3069af994665a6f09384a87e02c\&req=dSAvEs52lIJfWPMW1HO4zcJDyFPOHf3xqDqf%2BwtYsnfgQQn%2B6qs9tUXZNlXn%0AnBS3PqojwLs%2Bbg1fXI8%3D%0A)](https://downloads.intercomcdn.com/i/o/1084789301/f3a5678d18a15695584f0bdd/Screenshot+2024-06-17+at+3_47_15%E2%80%AFPM.png?expires=1739547900\&signature=fad953159428dc4cce8e09fa7a2728df84b8f3069af994665a6f09384a87e02c\&req=dSAvEs52lIJfWPMW1HO4zcJDyFPOHf3xqDqf%2BwtYsnfgQQn%2B6qs9tUXZNlXn%0AnBS3PqojwLs%2Bbg1fXI8%3D%0A)

### Follow Onboarding Steps <a href="#h_0389467f17" id="h_0389467f17"></a>

[![](https://downloads.intercomcdn.com/i/o/1084791275/d2cc6f73111516568dfd9e9a/Screenshot+2024-06-17+at+3_49_36%E2%80%AFPM.png?expires=1739547900\&signature=79f2092517f0eb477d7b9a67a792a909b61efa1c11a4c5c73bc5df6615832a58\&req=dSAvEs53nINYXPMW1HO4zUtxQ5bEftt%2FKME98sPpGGJ27IYrjqIjVTEuSj%2F1%0ABAEqdyL0FR5KnpbYSWc%3D%0A)](https://downloads.intercomcdn.com/i/o/1084791275/d2cc6f73111516568dfd9e9a/Screenshot+2024-06-17+at+3_49_36%E2%80%AFPM.png?expires=1739547900\&signature=79f2092517f0eb477d7b9a67a792a909b61efa1c11a4c5c73bc5df6615832a58\&req=dSAvEs53nINYXPMW1HO4zUtxQ5bEftt%2FKME98sPpGGJ27IYrjqIjVTEuSj%2F1%0ABAEqdyL0FR5KnpbYSWc%3D%0A)

Go through the onboarding steps and fill out the details that you want to call your workspace - we recommend something that relates to your team.

### Start adding assets <a href="#h_4ef0a7136c" id="h_4ef0a7136c"></a>

Once you've finished up onboarding - you will have created a workspace and a drive for you to add additional assets and files. Now you can easily upload files directly from your browser or via the Shade Desktop App.


# Deleting Workspace

Deleting Workspace

what happens if I delete my account? What happens if I cancel my plan?

<img src="https://static.intercomassets.com/avatars/5448627/square_128/brandon-image-1648585945.JPG" alt="Brandon Fan avatar" height="24" width="24">

Written by Brandon Fan

Updated over 8 months ago

When you delete a workspace, you are deleting all of the assets within it and canceling your plan upon deletion. If you have purchased a plan (monthly or annually), the rest of your plan is nonrefundable (if you do decide to create a new workspace, feel free to contact us and we'll port your existing plan over).

The action is irreversible and instant. All uploaded assets and your account data will be deleted immediately after you click delete.

Did this answer your question?


# Difference between a Workspace and a Drive

Workspace is the central location for you, your team, drives, and assets. This allows for easy permissions management across drives, unified billing across an organization, and logging for security and audit across files and assets. Workspaces can have as many drives of any type. Users can be added to a workspace with the following permissions:

Drives are the location in which you can house different sets of assets. You could choose to create a drive per project, per client, per shoot, or however you choose depending on you and your teams workflows.

Our recommended solution is to choose create a drive per client, and separate out folders for projects and shoots. This allows for maximum permission control and easy revocation and access expiration for external collaborators and workspace members.


# Do you use our data for training your AI?

We do not train our models with your data - as we discuss in our [data usage policy](https://shade.inc/data-usage-policy-and-ai) very clearly. This means that all of our models and systems never leverage or use any of your data to improve AI models without your explicit permission or use. Our models are trained with internally curated, licensed or publicly available data. We do our best to make sure we build systems that are designed FOR creatives and not to take advantage of them. Your data is and will always be encrypted and only you will have access to that data, we follow all best security practices to make sure that your data is secure and yours.


# What is Drive Inheritance?

Drive inheritance is the default permissions that a drive has for their workspace members. This means, that for a drive, the default drive permission will be defined for all workspace members if they are not explicitly added to the drive with a certain permission level (i.e. all workspace members, by default, will have "full access" to this new drive XYZ). This inheritance can be changed by any administrator of the drive or a workspace admin.

You can easily change the default inheritance for workspace members on a drive by heading into Settings > Drives > \<Drive Name> > Members > Default Inheritance.

<figure><img src="https://downloads.intercomcdn.com/i/o/1084926063/d1a498ff28098c095d9e9b66/Screenshot+2024-06-17+at+7_01_03%E2%80%AFPM.png?expires=1739547900&#x26;signature=849f587418775ea6d4a3d23a484c28d8544fab8374ac989ead7521b092489540&#x26;req=dSAvEsB8m4FZWvMW1HO4zftCS7cyBGD11YWHsmqb%2By43wuHTYZifRV%2F0RKiO%0ARBWcrPQOPiiWIj%2FweBg%3D%0A" alt=""><figcaption></figcaption></figure>


# How ShadeFS Works Real-Time

For some, real-time might seem and sound like it's just google drive syncing or dropbox. The reality is, it's not! No, it's not instantly downloading a whole 100GB to your computer, unfortunately we cannot change your internet speed. But what we can do is model specific types of media files to your computer as if they feel like they are local. Why does this work? It's because certain types of files (like video, images, etc.) are read sequentially by a variety of programs (like Premiere Pro, Davinci Resolve, Video, etc.) this makes it possible for us to send parts of files while waiting for the entire file to actually download. That is what we mean by real-time here.

Now real-time is also about your team - Shade syncs changes completely in real-time. This means that if a file is added from computer A in New York, computer B in LA will be able to instantly see that file, a preview of that file, and drag and drop that into their editing program, instantly - no uploading or downloading required to even start. This enables your team to be able to quickly start working right when the files are ready - not when they are fully uploaded and downloaded again.


# File/Folder Permissions

Workspace admin or drive managers can manage who can be invited to certain workspaces and drives, and determine their inheritance in the management structure.

A drive manager is a workspace member or workspace admin that actively manages who can be invited to this drive and what permissions are inherited from the workspace.

Here are the permission settings that can be assigned.

* Full Access - Able to create shareable links and shareable modifications on files and folders and the actions below.

  NOTE: Full access is not equivalent to being a drive manager.
* Editor - Able to edit and move files and folders around within the drive
* Commenter - Able to comment and approve of files
* Viewer - Able to view files but not comment


# How do seat limits work?

Seats (billable units) have limits depending on your workspace plan.&#x20;

For example, Personal plans only have 1 seat, Starter plans have up to 5, Growth up to 50, and Enterprise unlimited. Consider you seat count before choosing a plan.

Seats are defined as any Workspace Admin or Workspace Members, these are people that you have invited at the workspace level (typically your internal team or freelancers). Guests are NOT billed nor do they count towards your seats, however each plan has a limit on the number of guests allowed in a workspace.


# Can I get a refund?

What is Shade's refund policy?

We do not offer refunds for workspace or bulk storage subscriptions. If you cancel your workspace subscription (monthly or annual), you will retain access to paid features until the end of your billing period, after which your workspace will be automatically downgraded to the Free plan. Since bulk storage subscriptions are annual, refunds are not available under any circumstances, even if you cancel before the auto-renewal date.

If you were billed for members accidentally added to your workspace, email **<support@shade.inc>** within 72 hours of the invoice date for a full refund of prorated charges. Please ensure that you have removed the additional members from your workspace before contacting us.

If you were billed for members accidentally added to your workspace, email **<support@shade.inc>** within 72 hours of the invoice date for a full refund of prorated charges. Please ensure that you have removed the additional members from your workspace before contacting us.


# How to add more seats and guests outside of my plan?

If you maxed out your 15 seats and/or 150 guests, and want to add more to your workspace, you can contact sales by [booking a demo](https://shade.inc/book-a-demo) for the enterprise plan.

Alternatively, consider making some seats into guests.&#x20;




---

[Next Page](/llms-full.txt/1)

