> ## Documentation Index
> Fetch the complete documentation index at: https://docs.stackshift.cloud/llms.txt
> Use this file to discover all available pages before exploring further.

# Upload UX and DAM

> Use resumable upload sessions, progress-aware browser uploads, tags, folders, search, bulk actions, and usage summaries.

<Tip>
  **Live.** This area is documented as current, user-reliable behavior.
</Tip>

## Goal

Build a production upload and asset management workflow around the StackShift Assets API.

## Prerequisites

* A browser or backend client
* An authenticated API session for dashboard-style management actions

## Workflow

<Steps>
  <Step>
    Use normal upload for small backend files and upload sessions for large or unreliable browser uploads.
  </Step>

  <Step>
    Resume chunked uploads by reading the received part list from the session endpoint.
  </Step>

  <Step>
    Attach folder prefixes, tags, visibility, and metadata at upload time or through bulk actions.
  </Step>

  <Step>
    Search assets by query, tag, MIME type, family, folder, or checksum.
  </Step>

  <Step>
    Use collections and saved searches for repeatable DAM workflows.
  </Step>
</Steps>

## Chunked upload flow

```ts theme={null}
const session = await stackshift.assets.createChunkedUploadSession({
  fileName: file.name,
  fileSize: file.size,
  mimeType: file.type,
  bucket: 'media',
  key: `uploads/${file.name}`,
  visibility: 'private',
})

await stackshift.assets.uploadChunk(session.id, 1, firstChunk)
await stackshift.assets.completeUploadSession(session.id)
```

## Management tools

* Virtual folders are key prefixes, not separate folder records.
* Tags are normalized so filtering and bulk edits stay predictable.
* Duplicate hints use checksum groups.
* Usage summaries group assets by bucket, MIME family, visibility, and duplicates.
* Bulk actions support delete, visibility changes, tag changes, and metadata patches.

## Expected result

<Check>
  Users can upload large files reliably and manage the resulting library without leaving the dashboard.
</Check>

## Related guides

<CardGroup cols={2}>
  <Card title="Direct browser uploads" href="/assets/direct-browser-uploads">
    Create a short-lived signed upload URL on your server, then PUT the file directly from the browser.
  </Card>

  <Card title="AI DAM and versioning" href="/assets/ai-dam-and-versioning">
    Use OpenAI-backed asset intelligence, moderation, transcripts, smart crops, background removal, collections, saved searches, and branching versions.
  </Card>
</CardGroup>
