MyCase Open API

The MyCase Open API is a public REST/JSON API that lets MyCase Advanced-tier subscribers and their integration partners share data with the MyCase platform, programmatically trigger tasks or events, and build connected workflows. The API surface covers the authorized firm, cases, case stages, contacts, companies, client relationships, calendar events, tasks, documents and document folders, and time zones. Documentation is hosted on Stoplight at mycaseapi.stoplight.io. The API is available only to customers on the Advanced subscription tier; access must be requested through MyCase support and certified consultants are listed for implementation assistance.

MyCase Open API is one of 2 APIs that MyCase publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 1 machine-runnable capability that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko.

Tagged areas include Cases, Case Stages, Companies, Contacts, and Documents. The published artifact set on APIs.io includes API documentation, an API reference, an OpenAPI specification, and 1 Naftiko capability spec.

OpenAPI Specification

mycase-open-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: MyCase Open API
  version: "1.0"
  description: |
    Partial, profile-only OpenAPI description of the publicly documented MyCase
    Open API surface, hand-assembled from the Stoplight reference at
    https://mycaseapi.stoplight.io/ and the MyCase Open API support article at
    https://supportcenter.mycase.com/en/articles/9370198-open-api.

    Only resources whose existence is confirmed from MyCase's public
    documentation are represented here: the authorized firm, cases (per client),
    case stages, companies, client relationships on a case, calendar events,
    tasks, documents and document folders, and time zones. Request and response
    schemas are intentionally minimal — full schemas are gated behind the
    Stoplight reference, which requires sign-in to view request/response bodies
    in detail. Authentication is documented by MyCase as a per-firm credential
    flow obtained through MyCase support; the security scheme below uses HTTP
    bearer as a placeholder for the issued access token.

    This document is part of the api-evangelist/mycase profile and is intended
    for catalog and tooling purposes, not for client code generation.
  contact:
    name: MyCase Support
    url: https://supportcenter.mycase.com/
  license:
    name: MyCase Terms of Service
    url: https://www.mycase.com/terms-of-service/
servers:
  - url: https://api.mycase.com
    description: MyCase Open API (production). The exact base URL is documented inside the authenticated Stoplight reference; this value is a placeholder consistent with MyCase's public hostnames.
security:
  - bearerAuth: []
tags:
  - name: Firm
    description: The authorized firm of the current API user.
  - name: Cases
    description: Cases (matters) for the firm, and case-scoped sub-resources.
  - name: Case Stages
    description: Configured case stages for the firm.
  - name: Contacts
    description: People and client relationships associated with cases.
  - name: Companies
    description: Companies visible to the authorized user.
  - name: Events
    description: Calendar events on the firm calendar.
  - name: Tasks
    description: Tasks visible to the authorized user.
  - name: Documents
    description: Documents and document folders associated with a case.
  - name: Time Zones
    description: Supported time zone identifiers.
paths:
  /firm:
    get:
      tags: [Firm]
      summary: Get the Firm of the Current Authorized User
      operationId: getFirm
      description: Return the firm record for the current authorized API user. Documented at https://mycaseapi.stoplight.io/docs/mycase-api-documentation/0acc0620bdd9e-get-the-firm-of-the-current-authorized-user.
      responses:
        "200":
          description: Firm record.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Firm"
        "401":
          $ref: "#/components/responses/Unauthorized"

  /case_stages:
    get:
      tags: [Case Stages]
      summary: Get Case Stages
      operationId: getCaseStages
      description: Get all firm case stages viewable by the authorized user. Documented at https://mycaseapi.stoplight.io/docs/mycase-api-documentation/592cc136089e9-get-case-stages.
      responses:
        "200":
          description: A list of case stages.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/CaseStage"
        "401":
          $ref: "#/components/responses/Unauthorized"

  /companies:
    get:
      tags: [Companies]
      summary: Get Companies
      operationId: getCompanies
      description: Get all firm companies viewable by the authorized user. Documented at https://mycaseapi.stoplight.io/docs/mycase-api-documentation/eddd20d8e1045-get-companies.
      responses:
        "200":
          description: A list of companies.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Company"
        "401":
          $ref: "#/components/responses/Unauthorized"

  /clients/{clientId}/cases:
    parameters:
      - $ref: "#/components/parameters/ClientId"
    get:
      tags: [Cases]
      summary: Get All Cases for a Client
      operationId: getCasesForClient
      description: Return all cases associated with the given client. Documented at https://mycaseapi.stoplight.io/docs/mycase-api-documentation/999662f9e0762-get-all-cases-for-a-client.
      responses:
        "200":
          description: Cases associated with the client.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Case"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "404":
          $ref: "#/components/responses/NotFound"

  /cases/{caseId}/client_relationships:
    parameters:
      - $ref: "#/components/parameters/CaseId"
    post:
      tags: [Contacts]
      summary: Create a Client Relationship for a Case
      operationId: createClientRelationshipForCase
      description: Create a client relationship on the specified case. Documented at https://mycaseapi.stoplight.io/docs/mycase-api-documentation/2231b17f9f2e9-create-a-client-relationship-for-a-case.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ClientRelationshipInput"
      responses:
        "201":
          description: Client relationship created.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ClientRelationship"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "422":
          $ref: "#/components/responses/UnprocessableEntity"

  /cases/{caseId}/documents:
    parameters:
      - $ref: "#/components/parameters/CaseId"
    post:
      tags: [Documents]
      summary: Create a Document for a Case
      operationId: createDocumentForCase
      description: Upload a document to the specified case. Documented at https://mycaseapi.stoplight.io/docs/mycase-api-documentation/5f9d31af2e726-create-a-document-for-a-case.
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: "#/components/schemas/DocumentInput"
      responses:
        "201":
          description: Document created.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Document"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "422":
          $ref: "#/components/responses/UnprocessableEntity"

  /cases/{caseId}/documents_folder:
    parameters:
      - $ref: "#/components/parameters/CaseId"
    get:
      tags: [Documents]
      summary: Get Case Documents Folder
      operationId: getCaseDocumentsFolder
      description: Return the documents folder for the case, including subfolders and document references. Documented at https://mycaseapi.stoplight.io/docs/mycase-api-documentation/1b7dc53b16e9d-get-case-documents-folder.
      responses:
        "200":
          description: The case documents folder.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DocumentsFolder"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "404":
          $ref: "#/components/responses/NotFound"

  /events/{eventId}:
    parameters:
      - name: eventId
        in: path
        required: true
        schema:
          type: string
    patch:
      tags: [Events]
      summary: Update an Individual Event
      operationId: updateEvent
      description: Update an existing calendar event subject to user/firm privileges. Documented at https://mycaseapi.stoplight.io/docs/mycase-api-documentation/4f98681f0927b-update-an-individual-event.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/EventInput"
      responses:
        "200":
          description: Updated event.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Event"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "404":
          $ref: "#/components/responses/NotFound"

components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Bearer token issued through the MyCase Open API onboarding flow. The exact authorization endpoint is documented inside the authenticated Stoplight reference.
  parameters:
    ClientId:
      name: clientId
      in: path
      required: true
      description: The unique identifier for a client (contact) in MyCase.
      schema:
        type: string
    CaseId:
      name: caseId
      in: path
      required: true
      description: The unique identifier for a case in MyCase.
      schema:
        type: string
  responses:
    Unauthorized:
      description: Missing or invalid bearer token.
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
    NotFound:
      description: The requested resource was not found.
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
    UnprocessableEntity:
      description: Request body failed validation.
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
  schemas:
    Firm:
      type: object
      description: The firm record for the authorized user. Fields are gated behind the authenticated Stoplight reference; this shape is illustrative.
      properties:
        id:
          type: string
        name:
          type: string
        time_zone:
          type: string
          description: IANA time zone identifier used for the firm calendar.
    Case:
      type: object
      description: A case (matter) in MyCase.
      properties:
        id:
          type: string
        name:
          type: string
        case_number:
          type: string
        stage_id:
          type: string
        client_id:
          type: string
        opened_at:
          type: string
          format: date
        closed_at:
          type: string
          format: date
    CaseStage:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        practice_area:
          type: string
    Company:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        primary_email:
          type: string
          format: email
        primary_phone:
          type: string
    ClientRelationship:
      type: object
      properties:
        id:
          type: string
        case_id:
          type: string
        client_id:
          type: string
        role:
          type: string
    ClientRelationshipInput:
      type: object
      required: [client_id]
      properties:
        client_id:
          type: string
        role:
          type: string
    Document:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        case_id:
          type: string
        folder_id:
          type: string
        content_type:
          type: string
        size:
          type: integer
        created_at:
          type: string
          format: date-time
    DocumentInput:
      type: object
      required: [file]
      properties:
        file:
          type: string
          format: binary
        name:
          type: string
        folder_id:
          type: string
    DocumentsFolder:
      type: object
      properties:
        id:
          type: string
        case_id:
          type: string
        name:
          type: string
        subfolders:
          type: array
          items:
            $ref: "#/components/schemas/DocumentsFolder"
        documents:
          type: array
          items:
            $ref: "#/components/schemas/Document"
    Event:
      type: object
      properties:
        id:
          type: string
        title:
          type: string
        starts_at:
          type: string
          format: date-time
        ends_at:
          type: string
          format: date-time
        all_day:
          type: boolean
        case_id:
          type: string
        location:
          type: string
    EventInput:
      type: object
      properties:
        title:
          type: string
        starts_at:
          type: string
          format: date-time
        ends_at:
          type: string
          format: date-time
        all_day:
          type: boolean
        case_id:
          type: string
        location:
          type: string
    Error:
      type: object
      properties:
        message:
          type: string
        code:
          type: string