Smokeball Folders API

The Folders API from Smokeball — 4 operation(s) for folders.

OpenAPI Specification

smokeball-folders-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Smokeball Activity Codes Folders API
  version: '1.0'
  description: REST API for integrating with Smokeball legal practice management software. Supports matters, contacts, documents, time entries, billing, trust accounting, staff, webhooks, and law firm workflows across US, AU, and UK regions. Uses OAuth 2.0 (client credentials) authentication.
  contact:
    name: Smokeball Developer Support
    url: https://docs.smokeball.com/docs/api-docs/1e13a13124aee-introduction
  x-api-id: smokeball
  x-audience: external-public
servers:
- url: https://api.smokeball.com
- url: https://api.smokeball.com.au
- url: https://api.smokeball.co.uk
- url: https://stagingapi.smokeball.com
- url: https://stagingapi.smokeball.com.au
- url: https://stagingapi.smokeball.co.uk
security:
- api-key: []
  token: []
tags:
- name: Folders
paths:
  /matters/{matterId}/documents/folders:
    get:
      tags:
      - Folders
      summary: Get folders/files under root folder
      description: Returns a list of sub folders and files under the root folder of a matter.
      operationId: GetFolders
      parameters:
      - name: matterId
        in: path
        required: true
        schema:
          type: string
      - name: Offset
        in: query
        schema:
          maximum: 2147483647
          minimum: 0
          type: integer
          format: int32
      - name: Limit
        in: query
        schema:
          maximum: 500
          minimum: 1
          type: integer
          format: int32
      responses:
        '200':
          description: When request is successful. Returns a paged collection of 'FolderListing' objects.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FolderListingPagedCollection'
        '403':
          description: When the requested matter does not belong to the account making the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
    post:
      tags:
      - Folders
      summary: Create a folder
      description: Creates a new folder under the specified matter.
      operationId: CreateRootFolder
      parameters:
      - name: matterId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json-patch+json:
            schema:
              allOf:
              - $ref: '#/components/schemas/FolderDto'
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/FolderDto'
          application/*+json:
            schema:
              allOf:
              - $ref: '#/components/schemas/FolderDto'
      responses:
        '202':
          description: When request is accepted. Returns a hypermedia 'Link' object of the folder to be created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Link'
        '400':
          description: When folder name is not provided.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
  /matters/{matterId}/documents/folders/{folderId}:
    get:
      tags:
      - Folders
      summary: Get folders/files under a folder
      description: Returns a list of sub folders and files under a specified folder of a matter.
      operationId: GetFolderById
      parameters:
      - name: matterId
        in: path
        required: true
        schema:
          type: string
      - name: folderId
        in: path
        required: true
        schema:
          type: string
      - name: Offset
        in: query
        schema:
          maximum: 2147483647
          minimum: 0
          type: integer
          format: int32
      - name: Limit
        in: query
        schema:
          maximum: 500
          minimum: 1
          type: integer
          format: int32
      responses:
        '200':
          description: When request is successful. Returns a paged collection of 'FolderListing' objects.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FolderListingPagedCollection'
        '403':
          description: When the requested matter does not belong to the account making the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '404':
          description: When folder with the specified id does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
    put:
      tags:
      - Folders
      summary: Update a folder
      description: Updates a folder belonging to the specified matter.
      operationId: UpdateFolder
      parameters:
      - name: matterId
        in: path
        required: true
        schema:
          type: string
      - name: folderId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json-patch+json:
            schema:
              allOf:
              - $ref: '#/components/schemas/FolderDto'
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/FolderDto'
          application/*+json:
            schema:
              allOf:
              - $ref: '#/components/schemas/FolderDto'
      responses:
        '202':
          description: When request is accepted. Returns a hypermedia 'Link' object of the folder to be updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Link'
        '400':
          description: When folder name is not provided or folder does not belong to the specified matter.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '404':
          description: When folder with the specified id does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
    patch:
      tags:
      - Folders
      summary: Patch a folder
      description: Updates a folder belonging to the specified matter.
      operationId: PatchFolder
      parameters:
      - name: matterId
        in: path
        required: true
        schema:
          type: string
      - name: folderId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json-patch+json:
            schema:
              $ref: '#/components/schemas/FolderDto'
          application/json:
            schema:
              $ref: '#/components/schemas/FolderDto'
          application/*+json:
            schema:
              $ref: '#/components/schemas/FolderDto'
      responses:
        '202':
          description: When request is accepted. Returns a hypermedia 'Link' object of the folder to be updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Link'
        '400':
          description: When folder name is not provided or folder does not belong to the specified matter.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '404':
          description: When folder with the specified id does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
    delete:
      tags:
      - Folders
      summary: Delete a folder
      description: Deletes a folder belonging to the specified matter.
      operationId: DeleteFolder
      parameters:
      - name: matterId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      - name: folderId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '202':
          description: When request is accepted. Returns a hypermedia 'Link' object of the folder to be deleted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Link'
        '400':
          description: When the folder does not belong to the specified matter.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
  /matters/{matterId}/documents/folders/{folderId}/path:
    get:
      tags:
      - Folders
      summary: Get folder path hierarchy
      description: "Returns the full folder hierarchy (path) as a collection ordered from the root folder down to the supplied folder.\r\n\r\nThe root folder is not included in the response."
      operationId: GetFolderPath
      parameters:
      - name: matterId
        in: path
        required: true
        schema:
          type: string
      - name: folderId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: When request is successful. Returns the folder path hierarchy.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FolderPathSegmentCollection'
        '403':
          description: When the requested matter does not belong to the account making the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '404':
          description: When folder with the specified id does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
  /matters/{matterId}/documents/folders/{folderId}/history:
    get:
      tags:
      - Folders
      summary: Get folder history on a matter
      description: Returns a list of history entries for the specified folder.
      operationId: GetFolderHistory
      parameters:
      - name: matterId
        in: path
        required: true
        schema:
          type: string
      - name: folderId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: When request is successful. Returns a collection of 'FileFolderLogEntry' objects.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileFolderLogEntryCollection'
        '403':
          description: When the requested matter does not belong to the account making the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
components:
  schemas:
    FileFolderLogEntry:
      type: object
      properties:
        href:
          type: string
          nullable: true
        relation:
          type: string
          nullable: true
        method:
          type: string
          default: GET
          nullable: true
        self:
          allOf:
          - $ref: '#/components/schemas/Link'
          nullable: true
        id:
          type: string
          description: Unique identifier of this log entry.
          nullable: true
          example: 3f2b1f2a-1d5f-48a4-8f3c-7a7a3c2b5e1a
        type:
          type: string
          description: The type of entity this log entry refers to.
          example: File
        changeType:
          type: string
          description: The type of change that occurred.
          example: Move
        timestamp:
          type: string
          description: When the client recorded the action (UTC).
          format: date-time
          example: '2025-08-27T04:12:45Z'
        file:
          allOf:
          - $ref: '#/components/schemas/Link'
          description: Link to the file affected by this entry (only populated when Type is File).
          nullable: true
        folder:
          allOf:
          - $ref: '#/components/schemas/Link'
          description: Link to the folder affected by this entry (only populated when Type is Folder).
          nullable: true
        oldName:
          type: string
          description: Old name prior to a rename operation (when applicable).
          nullable: true
          example: Draft Response
        newName:
          type: string
          description: New name after a rename operation (when applicable).
          nullable: true
          example: Final Response
        oldMatterId:
          type: string
          description: Previous matter identifier (for move/copy across matters).
          nullable: true
          example: f9e1a9d5-1d2b-4bd2-9a72-6a6e7b5c2f01
        newMatterId:
          type: string
          description: New matter identifier (for move/copy across matters).
          nullable: true
          example: 1c0b8a31-0a05-4601-8b87-2d7b1d0caa9a
        oldFolderId:
          type: string
          description: Previous folder identifier (for move within/between matters).
          nullable: true
          example: 6a5c3b2e-0f1e-4c7e-90e2-2ad3c3e8b0b9
        newFolderId:
          type: string
          description: New folder identifier (for move within/between matters).
          nullable: true
          example: 9b7a2c4d-2e1f-4b6a-8e01-1f2a3b4c5d6e
        copySourceFileId:
          type: string
          description: For copy operations, the source file's identifier when copying a file.
          nullable: true
          example: bb3a6c1d-1e2f-4a7b-9c01-0d9a8c7b6e5f
        copySourceFolderId:
          type: string
          description: For copy operations, the source folder's identifier when copying a folder.
          nullable: true
          example: aa2b5c1e-7f8a-4d9e-8c01-1a2b3c4d5e6f
        documentVersionId:
          type: string
          description: "Identifier of the document version involved (only for version replace/revert scenarios).\r\nCan be used to download particular file versions."
          nullable: true
          example: 2d97e267-0618-4822-a515-281cd4f31ae8-72324ca30d263b32bb38a481cc5f7a0b
        userId:
          type: string
          description: The user who is responsible for this change.
          nullable: true
      additionalProperties: false
      description: Represents a single file/folder activity (rename, move, delete, etc.).
    FolderListingPagedCollection:
      type: object
      properties:
        id:
          type: string
          nullable: true
        href:
          type: string
          nullable: true
        relation:
          type: string
          nullable: true
        method:
          type: string
          default: GET
          nullable: true
        self:
          allOf:
          - $ref: '#/components/schemas/Link'
          nullable: true
        value:
          type: array
          items:
            $ref: '#/components/schemas/FolderListing'
          nullable: true
        offset:
          type: integer
          format: int32
          nullable: true
        limit:
          type: integer
          format: int32
          nullable: true
        size:
          type: integer
          format: int64
        first:
          allOf:
          - $ref: '#/components/schemas/Link'
          nullable: true
        previous:
          allOf:
          - $ref: '#/components/schemas/Link'
          nullable: true
        next:
          allOf:
          - $ref: '#/components/schemas/Link'
          nullable: true
        last:
          allOf:
          - $ref: '#/components/schemas/Link'
          nullable: true
        parentId:
          type: string
          description: Unique identifier of the parent folder
          nullable: true
          example: 750eb5c5-ac0b-7d11-4997-e0ce9d8896c8
        name:
          type: string
          description: Name of the folder
          nullable: true
          example: Property Documents
      additionalProperties: false
    FolderDto:
      required:
      - name
      type: object
      properties:
        name:
          maxLength: 256
          minLength: 1
          type: string
          description: Name of the folder
          example: Property Documents
        parentFolderId:
          type: string
          description: Unique identifier of the parent folder
          nullable: true
          example: b471682e-fa17-4e46-b7fe-9b2b8fdcb3c2
        userId:
          type: string
          description: Unique identifier of the user modifying the folder. If null it will fallback to the authenticated user
          nullable: true
          example: 750eb5c5-ac0b-7d11-4997-e0ce9d8896c8
      additionalProperties: false
    FileFolderLogEntryCollection:
      type: object
      properties:
        id:
          type: string
          nullable: true
        href:
          type: string
          nullable: true
        relation:
          type: string
          nullable: true
        method:
          type: string
          default: GET
          nullable: true
        self:
          allOf:
          - $ref: '#/components/schemas/Link'
          nullable: true
        value:
          type: array
          items:
            $ref: '#/components/schemas/FileFolderLogEntry'
          nullable: true
      additionalProperties: false
    Link:
      type: object
      properties:
        id:
          type: string
          nullable: true
        href:
          type: string
          nullable: true
        relation:
          type: string
          nullable: true
        method:
          type: string
          default: GET
          nullable: true
      additionalProperties: false
    FolderPathSegment:
      type: object
      properties:
        id:
          type: string
          description: Unique identifier of the folder
          nullable: true
          example: b471682e-fa17-4e46-b7fe-9b2b8fdcb3c2
        name:
          type: string
          description: Name of the folder
          nullable: true
          example: Property Documents
        parentId:
          type: string
          description: Unique identifier of the parent folder
          nullable: true
          example: 750eb5c5-ac0b-7d11-4997-e0ce9d8896c8
        depth:
          type: integer
          description: "The depth of the folder in the folder path hierarchy.\r\n\r\n0 indicates the root folder, 1 indicates a direct child of that folder, and so on."
          format: int32
          example: 2
      additionalProperties: false
    ProblemDetails:
      type: object
      properties:
        type:
          type: string
          nullable: true
        title:
          type: string
          nullable: true
        status:
          type: integer
          format: int32
          nullable: true
        detail:
          type: string
          nullable: true
        instance:
          type: string
          nullable: true
      additionalProperties: {}
    FolderPathSegmentCollection:
      type: object
      properties:
        id:
          type: string
          nullable: true
        href:
          type: string
          nullable: true
        relation:
          type: string
          nullable: true
        method:
          type: string
          default: GET
          nullable: true
        self:
          allOf:
          - $ref: '#/components/schemas/Link'
          nullable: true
        value:
          type: array
          items:
            $ref: '#/components/schemas/FolderPathSegment'
          nullable: true
      additionalProperties: false
    Folder:
      type: object
      properties:
        href:
          type: string
          nullable: true
        relation:
          type: string
          nullable: true
        method:
          type: string
          default: GET
          nullable: true
        self:
          allOf:
          - $ref: '#/components/schemas/Link'
          nullable: true
        id:
          type: string
          description: Unique identifier of the folder
          nullable: true
          example: b471682e-fa17-4e46-b7fe-9b2b8fdcb3c2
        parentId:
          type: string
          description: Unique identifier of the parent folder
          nullable: true
          example: 750eb5c5-ac0b-7d11-4997-e0ce9d8896c8
        name:
          type: string
          description: Name of the folder
          nullable: true
          example: Property Documents
      additionalProperties: false
    FolderListing:
      type: object
      properties:
        id:
          type: string
          nullable: true
        href:
          type: string
          nullable: true
        relation:
          type: string
          nullable: true
        method:
          type: string
          default: GET
          nullable: true
        self:
          allOf:
          - $ref: '#/components/schemas/Link'
          nullable: true
        folders:
          type: array
          items:
            $ref: '#/components/schemas/Folder'
          description: List of folders
          nullable: true
          readOnly: true
        files:
          type: array
          items:
            $ref: '#/components/schemas/File'
          description: List of files
          nullable: true
          readOnly: true
      additionalProperties: false
    File:
      type: object
      properties:
        href:
          type: string
          nullable: true
        relation:
          type: string
          nullable: true
        method:
          type: string
          default: GET
          nullable: true
        self:
          allOf:
          - $ref: '#/components/schemas/Link'
          nullable: true
        id:
          type: string
          description: Unique identifier of the file.
          nullable: true
          example: b471682e-fa17-4e46-b7fe-9b2b8fdcb3c2
        versionId:
          type: string
          description: Unique identifier of the file's current version.
          nullable: true
        folder:
          allOf:
          - $ref: '#/components/schemas/Link'
          description: Hypermedia link of the folder to which the file belongs.
          nullable: true
        matter:
          allOf:
          - $ref: '#/components/schemas/Link'
          description: Hypermedia link of the matter to which the file belongs.
          nullable: true
        name:
          type: string
          description: Name of the file, excluding file extension.
          nullable: true
          example: court filing
        fileExtension:
          type: string
          description: Extension of the file.
          nullable: true
          example: .pdf
        ownerId:
          type: string
          description: Unique identifier of the user who created/uploaded this file.
          nullable: true
          example: 750eb5c5-ac0b-7d11-4997-e0ce9d8896c8
        to:
          type: string
          description: The 'To' or recipients' email address (only applicable for email files).
          nullable: true
          example: recipient@email.com
        from:
          type: string
          description: The 'From' or sender's email address (only applicable for email files).
          nullable: true
          example: sender@email.com
        dateCreated:
          type: string
          description: The original datetime that the file was created.
          format: date-time
          example: '2022-04-23T14:00:00Z'
        dateModified:
          type: string
          description: The datetime that the file was last modified.
          format: date-time
          example: '2022-04-25T17:00:00Z'
        sizeBytes:
          type: integer
          description: Size of the file (in bytes).
          format: int64
          example: 19104768
        downloadInfo:
          allOf:
          - $ref: '#/components/schemas/Link'
          description: Hypermedia link to the download details of the file.
          nullable: true
        additionalData:
          type: object
          additionalProperties:
            nullable: true
          description: Collection of file meta data as KeyValuePair(string, object).
          nullable: true
        isFavorite:
          type: boolean
          description: Flag indicating whether this file is a favorite
          example: false
        isUploaded:
          type: boolean
          description: Flag indicating whether the file contents are uploaded to the server.
          example: false
        isCancelled:
          type: boolean
          description: Flag indicating whether the file upload has been cancelled.
          example: false
        isDuplicate:
          type: boolean
          description: Flag indicating whether the file data is duplicated. Applies to emails only for now.
        isDeleted:
          type: boolean
          description: Flag indicating whether the file has been deleted.
          example: false
      additionalProperties: false
  securitySchemes:
    api-key:
      type: apiKey
      name: x-api-key
      in: header
    token:
      type: apiKey
      name: Authorization
      in: header
      x-amazon-apigateway-authtype: cognito_user_pools