openapi: '3.0.0' info: version: 1.0.3 title: DEA Case API paths: /cases/all-cases: get: summary: Get all cases description: admin-only returns list of cases tags: - elevated parameters: - in: query name: limit schema: type: integer - in: query name: next schema: type: string responses: 200: description: Success Response content: application/json: schema: type: object properties: cases: type: array items: $ref: '#/components/schemas/Cases' next: type: string /cases/{caseId}/owner: post: summary: Set new owner of a case description: Admin-only set new owner of a case tags: - elevated parameters: - in: path name: caseId schema: type: string required: true requestBody: content: application/json: schema: type: object properties: userId: type: string caseId: type: string actions: type: array items: $ref: '#/components/schemas/CaseAction' isOwner: type: boolean default: true responses: 200: description: Case successfully created content: application/json: schema: properties: userId: type: string caseId: type: string /cases/{caseId}/scopedInformation: get: summary: Return scoped information on case by Case Id description: Get specific set case details. Intended for evidence managers and admins tags: - elevated parameters: - in: path name: caseId schema: type: string required: true responses: 200: description: Success content: application/json: schema: $ref: '#/components/schemas/ScopedCase' /cases: post: tags: - cases requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateCaseObject' responses: 200: description: Case successfully created content: application/json: schema: $ref: '#/components/schemas/Case' /cases/{caseId}/userMemberships: post: summary: Add a user as a collaborator to a case tags: - cases parameters: - in: path name: caseId schema: type: string required: true requestBody: content: application/json: schema: $ref: '#/components/schemas/CaseUserRequest' responses: 200: description: Case successfully created content: application/json: schema: properties: userId: type: string caseId: type: string get: summary: Get all users by case description: get all users with membership on a case tags: - cases parameters: - in: path name: caseId schema: type: string required: true - in: query name: limit schema: type: integer - in: query name: next schema: type: string responses: 200: description: Success Response content: application/json: schema: type: object properties: users: type: array items: $ref: '#/components/schemas/Users' next: type: string /cases/{caseId}/users/{userId}/memberships: put: summary: Update case user description: Update the details on an existing case membership tags: - cases parameters: - in: path name: caseId schema: type: string required: true - in: path name: userId schema: type: string required: true requestBody: content: application/json: schema: $ref: '#/components/schemas/CaseUserRequest' responses: 200: description: Case successfully created content: application/json: schema: $ref: '#/components/schemas/CaseUserRequest' delete: summary: Remove case user description: Remove a collaborator from a case tags: - cases parameters: - in: path name: caseId schema: type: string required: true - in: path name: userId schema: type: string required: true responses: 204: description: No content, delete successful /cases/my-cases: get: summary: get user's cases description: returns array of cases on which the user has membership tags: - cases parameters: - in: query name: limit schema: type: integer - in: query name: next schema: type: string responses: 200: description: Success Response content: application/json: schema: type: object properties: cases: type: array items: $ref: '#/components/schemas/Cases' next: type: string /cases/{caseId}/actions: get: summary: Return case actions available to user by case Id description: Get user for case and their available actions tags: - cases parameters: - in: path name: caseId schema: type: string required: true responses: 200: description: Success content: application/json: schema: $ref: '#/components/schemas/CaseUser' /cases/{caseId}/details: get: summary: Return case details by case Id description: Get metadata for a specific case. return not found if user doesn’t have access tags: - cases parameters: - in: path name: caseId schema: type: string required: true responses: 200: description: Success content: application/json: schema: $ref: '#/components/schemas/Case' put: summary: Update case details tags: - cases parameters: - in: path name: caseId schema: type: string required: true requestBody: content: application/json: schema: $ref: '#/components/schemas/CaseUpdateRequest' responses: 200: description: Success content: application/json: schema: $ref: '#/components/schemas/Case' delete: summary: Delete case tags: - elevated parameters: - in: path name: caseId schema: type: string required: true responses: 200: description: Success /cases/{caseId}/status: put: summary: Update case status and optionally request deletion of case files tags: - cases parameters: - in: path name: caseId schema: type: string required: true requestBody: content: application/json: schema: type: object properties: name: type: string deleteFiles: type: boolean default: false status: $ref: '#/components/schemas/CaseStatus' responses: 200: description: Success content: application/json: schema: $ref: '#/components/schemas/Case' /cases/{caseId}/files: post: summary: Begin case file upload tags: - cases parameters: - in: path name: caseId schema: type: string required: true requestBody: content: application/json: schema: $ref: '#/components/schemas/CaseFiles' responses: 200: description: Success Response content: application/json: schema: $ref: '#/components/schemas/CaseUploadResponse' get: summary: list files by directory description: List files within a case in given file path or case root tags: - cases parameters: - in: path name: caseId schema: type: string required: true - in: query name: filePath schema: type: string - in: query name: limit schema: type: integer - in: query name: next schema: type: string responses: 200: description: Success content: application/json: schema: type: object properties: caseFiles: type: array items: $ref: '#/components/schemas/CaseFiles' next: type: string /cases/{caseId}/files/{fileId}/info: get: summary: File details description: Get details for a file within a case tags: - cases parameters: - in: path name: caseId schema: type: string required: true - in: path name: fileId schema: type: string required: true responses: 200: description: Success Response content: application/json: schema: type: object properties: caseId: type: string file: $ref: '#/components/schemas/CaseFile' /cases/{caseId}/files/{fileId}/contents: get: summary: Download file description: Download the contents of a file via s3 signed url tags: - cases parameters: - in: path name: caseId schema: type: string required: true - in: path name: fileId schema: type: string required: true responses: 200: description: Success Response content: application/json: schema: type: object properties: isArchived: type: boolean downloadUrl: type: string format: uri isRestoring: type: boolean put: summary: Complete case file upload tags: - cases parameters: - in: path name: caseId schema: type: string required: true - in: path name: fileId schema: type: string required: true requestBody: content: application/json: schema: $ref: '#/components/schemas/CaseFiles' responses: 200: description: Success Response content: application/json: schema: $ref: '#/components/schemas/CaseUploadResponse' /cases/{caseId}/files/{fileId}/restore: put: summary: Restore archived file description: Restore archived file by moving it to frequent access tier (if archived in intelligent-tier) or creating a restored copy (if archived in glacier) tags: - cases parameters: - in: path name: caseId schema: type: string required: true - in: path name: fileId schema: type: string required: true responses: 204: description: No content, restore successful /users: get: summary: Get all users tags: - cases parameters: - in: query name: limit schema: type: integer - in: query name: next schema: type: string responses: 200: description: Success Response content: application/json: schema: type: object properties: users: type: array items: $ref: '#/components/schemas/Users' next: type: string /availableEndpoints: get: summary: Get available endpoints for a user tags: - cases responses: 200: description: Success Response content: application/json: schema: type: object properties: actions: type: array items: type: string components: schemas: Case: type: object properties: ulid: type: string name: type: string status: $ref: '#/components/schemas/CaseStatus' objectCount: type: number totalSizeBytes: type: number fileStatus: $ref: '#/components/schemas/CaseFileStatus' s3BatchJobId: type: string created: type: string updated: type: string Cases: type: array items: $ref: '#/components/schemas/Case' ScopedCase: type: object properties: ulid: type: string name: type: string CaseUpdateRequest: type: object properties: caseId: type: string caseName: type: string caseDescription: type: string CreateCaseObject: type: object properties: name: type: string example: Cookie Stealing description: type: string example: Suspecting cookie monster stole all the cookies status: type: string example: ACTIVE CaseUser: type: object properties: userId: type: string caseId: type: string actions: type: array items: $ref: '#/components/schemas/CaseAction' caseName: type: string firstName: type: string lastName: type: string created: type: string updated: type: string CaseUserRequest: type: object properties: userId: type: string caseId: type: string actions: type: array items: $ref: '#/components/schemas/CaseAction' isOwner: type: boolean CaseFile: type: object properties: fileName: type: string filePath: type: string caseId: type: string fileSizeBytes: type: number sha256Hash: type: string ulid: type: string uploadId: type: string isFile: type: boolean contentPath: type: string CaseFiles: type: array items: $ref: '#/components/schemas/CaseFile' CaseUploadResponse: type: object properties: caseId: type: string uploadId: type: string versionId: type: string presignedUrls: type: array items: type: string format: uri User: type: object properties: ulid: type: string firstName: type: string lastName: type: string lowerFirstName: type: string lowerLastName: type: string Users: type: array items: $ref: '#/components/schemas/User' CaseAction: type: string enum: [VIEW_CASE_DETAILS, UPLOAD, DOWNLOAD, ARCHIVE, RESTORE, VIEW_FILES, CASE_AUDIT, INVITE, OWN] CaseStatus: type: string enum: [ACTIVE, ARCHIVE, DELETED] CaseFileStatus: type: string enum: [ACTIVE, DELETING, DELETE_FAILED, DELETED, PENDING]