- Create a vault (once per case)
- Upload your file
- Process it (we call this “ingest”)
Step 1: Create a vault
A vault is a container for your documents. Create one per case or matter.Endpoint
Response
Vault options
| Option | Default | Description |
|---|---|---|
name | required | Display name for the vault |
description | optional | Description of the vault’s purpose |
groupId | optional | Assign the vault to a group for access control |
enableIndexing | true | Enable vector search. Set false for storage-only vaults |
enableGraph | true | Enable GraphRAG knowledge graph (requires indexing) |
If your API key is scoped to specific groups,
groupId is required and must be a group the key has access to.Storage-only vaults
If you only need document storage without search capabilities, create a storage-only vault:Storage-only vaults skip vector bucket and index creation. Files can be uploaded and downloaded, but search and GraphRAG are unavailable. Use this for pure archival or when you’ll process documents externally.
Step 2: Upload a file
Uploading is two parts: get a secure URL, then PUT your file to it.Endpoint
Why two steps?
Security and speed. Your file goes directly to encrypted storage—we’re never a bottleneck for large uploads.Supported file types
| Type | Extensions |
|---|---|
| Documents | .pdf, .doc, .docx, .txt, .rtf, .xml |
| Images | .png, .jpg, .jpeg, .tiff, .bmp |
| Audio | .mp3, .m4a, .wav, .flac, .ogg |
| Video | .mp4, .webm, .mov |
| Court recordings | .ftr |
Step 3: Process the file
This is where the magic happens. Processing (we call it “ingest”) does different things based on file type:| File type | What we do |
|---|---|
| Scanned PDF, images | OCR to extract text |
| Audio, video | Transcribe with speaker labels |
| FTR recordings | Convert → Transcribe |
| Digital PDF, DOCX, TXT, RTF, XML | Extract text directly |
Endpoint
Processing time
| File | Time |
|---|---|
| 10-page clean PDF | ~10 seconds |
| 50-page scanned PDF | ~2-3 minutes |
| 300-page scanned PDF | ~12-15 minutes |
| 1-hour audio/video | ~5-10 minutes |
Use webhooks (recommended for production)
Polling works, but webhooks scale better and give your users faster updates.- Create a vault event subscription
- Receive lifecycle events as ingestion progresses
- Update your app state from webhook payloads
Webhook delivery is at-least-once. Use the payload
id as your idempotency key and design handlers to safely process duplicates.See Vault Webhooks →
Check status (polling fallback)
Complete example
Upload an entire folder of discovery documents:Metadata matters. Add metadata like
witness, document_type, or date when uploading—you can filter search results by these fields later.