- 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
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
Step 3: Process the file
This is where the magic happens. Processing (we call it “ingest”) does different things based on file type:
Then for all files: split into chunks, convert to vectors, index for search.
Endpoint
Processing time
Processing is async—you get an immediate response while we work in the background.
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.
