Skip to content

Manage Case Files๐Ÿ”—

Upload, retrieve, download, and delete files attached to a case.

Initialize File Upload๐Ÿ”—

mutation startCaseFileUpload($input: StartCaseFileUploadInput!) {
    startCaseFileUpload(input: $input) {
        file {
            id
            name
            size
            status
        }
        presignedUrl
    }
}

Variables๐Ÿ”—

{
    "input": {
        "caseId": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
        "name": "investigation_report.pdf",
        "size": 1024000,
        "contentType": "application/pdf",
        "isEmbedded": false
    }
}

Delete File๐Ÿ”—

mutation deleteCaseFile($input: DeleteCaseFileInput!) {
    deleteCaseFile(input: $input) {
        id
        name
        deletedAt
    }
}

Variables๐Ÿ”—

{
    "input": {
        "fileId": "<file_id>"
    }
}

Get Case Files๐Ÿ”—

List files attached to a case. Request downloadURL to get a signed URL for retrieving the file's contents.

query caseFiles($arguments: CaseFilesArguments!) {
    caseFiles(arguments: $arguments) {
        files {
            id
            name
            size
            status
            isEmbedded
            createdAt
            downloadURL
        }
        totalCount
    }
}

Variables๐Ÿ”—

{
    "arguments": {
        "query": "investigationId = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'",
        "page": 1,
        "perPage": 20
    }
}

Response Example๐Ÿ”—

{
    "data": {
        "caseFiles": {
            "files": [
                {
                    "id": "550e8400-e29b-41d4-a716-446655440500",
                    "name": "investigation_report.pdf",
                    "size": 1024000,
                    "status": "UPLOADED",
                    "isEmbedded": false,
                    "createdAt": "2024-08-14T15:52:30Z",
                    "downloadURL": "https://files.example.com/signed-url..."
                }
            ],
            "totalCount": 1
        }
    }
}

Get a Single File๐Ÿ”—

Use caseFile to fetch one file by ID, for example, to refresh an expired downloadURL.

query caseFile($arguments: CaseFileArguments!) {
    caseFile(arguments: $arguments) {
        id
        name
        size
        status
        downloadURL
    }
}

Variables๐Ÿ”—

{
    "arguments": {
        "fileId": "550e8400-e29b-41d4-a716-446655440500"
    }
}

Notes๐Ÿ”—

  • isEmbedded indicates if the file is embedded in case content (e.g., images in key findings). Embedded files do not generate audit logs on download.
  • status is one of SCHEDULED (upload URL issued, file not yet uploaded), UPLOADED, ERROR_UPLOAD, or DELETED.
  • Download URLs are signed and valid for 15 minutes. Re-query caseFile or caseFiles with downloadURL selected to get a fresh one.
  • Requesting download URLs generates audit logs (except for embedded files).
  • caseFiles is not scoped to a case by default. You must filter it with the query argument, using investigationId (not caseId) to match the case's id, e.g. investigationId = '<case id>'. Add AND isEmbedded = false to exclude embedded files.