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

# Generate presigned upload URL for vault file

> Generate a presigned URL for uploading files directly to a vault's S3 storage. After uploading to S3, confirm the upload result via POST /vault/:vaultId/upload/:objectId/confirm before triggering ingestion.



## OpenAPI

````yaml /openapi.json post /vault/{id}/upload
openapi: 3.1.0
info:
  title: Case.dev API
  description: >-
    The AI-native platform for legal technology. Build smarter legal
    applications with our suite of AI-powered APIs.
  version: 1.0.0
  contact:
    name: Case.dev Support
    email: support@casemark.com
    url: https://case.dev
  license:
    name: Proprietary
    url: https://case.dev/terms
servers:
  - url: https://api.case.dev
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Vaults
    description: Secure document storage with semantic search and GraphRAG
  - name: Memory
    description: >-
      Persistent memory for AI agents with semantic search and 12 generic
      indexed tag fields
  - name: OCR
    description: Extract text from PDFs, images, and scanned documents
  - name: Voice
    description: Audio transcription and text-to-speech
  - name: LLMs
    description: Access 40+ language models through a unified API
  - name: Search
    description: Web search, AI answers, and deep research
  - name: Mail
    description: Managed inboxes for agent email workflows
  - name: Media
    description: Transcript retrieval and captioned media clip generation
  - name: Legal
    description: Legal research tools including citation verification
  - name: Privilege
    description: Privilege detection for e-discovery and litigation workflows
  - name: Compute
    description: Serverless GPU and CPU infrastructure
  - name: Format
    description: Document formatting and template rendering (MD/JSON to PDF/DOCX)
  - name: SuperDoc
    description: Document conversion and template automation
  - name: Webhooks
    description: Webhook endpoint management
  - name: System
    description: Public system metadata and discovery endpoints
  - name: Usage
    description: Usage reporting and webhook subscriptions
  - name: Database
    description: Serverless PostgreSQL databases with instant branching
  - name: Translation
    description: Language detection and translation for multilingual legal workflows
  - name: Skills
    description: Search and read legal AI skills for agents
  - name: Agents
    description: >-
      Create, manage, and execute AI agents with tool access, sandbox
      environments, and async run workflows
  - name: Matters
    description: Matter-native legal workspaces and orchestration primitives
  - name: Applications Projects
    description: Web application project management
  - name: Applications Deployments
    description: Web application deployment management
  - name: Applications Domains
    description: Custom domain configuration for applications
  - name: Applications Env Vars
    description: Environment variable management for applications
paths:
  /vault/{id}/upload:
    post:
      tags:
        - Vaults
      summary: Generate presigned upload URL for vault file
      description: >-
        Generate a presigned URL for uploading files directly to a vault's S3
        storage. After uploading to S3, confirm the upload result via POST
        /vault/:vaultId/upload/:objectId/confirm before triggering ingestion.
      operationId: generateVaultUploadUrl
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: Vault ID to upload the file to
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - filename
                - contentType
              properties:
                filename:
                  type: string
                  description: Name of the file to upload
                contentType:
                  type: string
                  description: MIME type of the file (e.g., application/pdf, image/jpeg)
                metadata:
                  type: object
                  description: Additional metadata to associate with the file
                auto_index:
                  type: boolean
                  default: true
                  description: >-
                    Whether to automatically process and index the file for
                    search
                is_ai_generated:
                  type: boolean
                  default: false
                  description: >-
                    Marks the file as AI-generated work product (e.g. uploaded
                    by an agent) rather than a user-provided source document.
                    Persisted on the object and returned by object listings so
                    clients can distinguish provenance.
                sizeBytes:
                  type: integer
                  minimum: 1
                  maximum: 5368709120
                  description: >-
                    File size in bytes (optional, max 5GB for single PUT
                    uploads). When provided, enforces exact file size at S3
                    level.
                path:
                  type: string
                  description: >-
                    Optional folder path for hierarchy preservation. Allows
                    integrations to maintain source folder structure from
                    systems like NetDocs, Clio, or Smokeball. Example:
                    '/Discovery/Depositions/2024'
      responses:
        '200':
          description: Upload URL generated successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  objectId:
                    type: string
                    description: Unique identifier for the uploaded object
                  uploadUrl:
                    type: string
                    description: Presigned URL for uploading the file
                  expiresIn:
                    type: number
                    description: URL expiration time in seconds
                  s3Key:
                    type: string
                    description: S3 object key for the file
                  path:
                    type: string
                    nullable: true
                    description: Folder path for hierarchy if provided
                  auto_index:
                    type: boolean
                    description: Whether the file will be automatically indexed
                  is_ai_generated:
                    type: boolean
                    description: Whether the file is marked as AI-generated work product
                  enableIndexing:
                    type: boolean
                    description: >-
                      Whether the vault supports indexing. False for
                      storage-only vaults.
                  instructions:
                    type: object
                    properties:
                      method:
                        type: string
                      headers:
                        type: object
                      note:
                        type: string
                  next_step:
                    type: string
                    nullable: true
                    description: Next API endpoint to call for processing
              example:
                objectId: cm123abc456
                uploadUrl: >-
                  https://vault-bucket.s3.amazonaws.com/objects/cm123abc456/contract.pdf?X-Amz-Algorithm=...
                expiresIn: 3600
                s3Key: objects/cm123abc456/contract.pdf
                auto_index: true
                enableIndexing: true
                instructions:
                  method: PUT
                  headers:
                    Content-Type: application/pdf
                  note: >-
                    Upload your file to the uploadUrl using PUT request. After
                    upload completes, call POST
                    /vault/:vaultId/upload/:objectId/confirm to record the
                    result, then call POST /vault/:vaultId/ingest/:objectId to
                    trigger processing.
                next_step: POST /vault/vault_789/ingest/cm123abc456
        '400':
          description: Invalid request - missing required fields or invalid vault ID
        '401':
          description: Authentication failed - invalid API key
        '403':
          description: Access denied - API key lacks vault service permissions
        '404':
          description: Vault not found or access denied
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API Key
      description: API key starting with `sk_case_`

````