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

# List / search cases

> With no filter parameters this remains the creation-ordered minimal sync inventory shipped for document-sync integrations. With view=full or any filter it returns the full case serializer. The legacy documents:read scope keeps working on this route alongside cases:read.

Requires the `cases:read or the legacy documents:read` scope. Rate tier: `read`.



## OpenAPI

````yaml /openapi.json get /api/v1/cases
openapi: 3.1.0
info:
  title: Grand Charter Public API
  version: 1.0.0
  description: >-
    Org-scoped integration API for the Grand Charter legal platform.


    Authenticate every request with an integration API key in the `x-api-key`
    header. Keys are created in the attorney portal under **Settings →
    Integrations → API Credentials** (or by platform admins) and carry an
    explicit list of scopes; each operation below names its required scope
    (`x-required-scope`).


    Conventions: JSON bodies/responses in camelCase; money in integer cents;
    ISO-8601 UTC timestamps; keyset cursor pagination (`after`, `limit` →
    `nextCursor`); errors use `{ success: false, error, code }`.


    Idempotency: most mutations require an `X-Idempotency-Key` header — each
    operation description below says so explicitly. Exceptions that do NOT
    consume the header (retrying them can create duplicates): `POST /leads`,
    `PATCH /leads/{leadId}`, and `PATCH /cases/{caseId}`.
servers:
  - url: https://www.presolve.com
    description: Production
security:
  - integrationApiKey: []
tags:
  - name: Platform
  - name: Org & Team
  - name: Cases
  - name: Leads
  - name: Clients
  - name: Contacts
  - name: Documents
  - name: Notes
  - name: Tasks
  - name: Calendar
  - name: Deadlines
  - name: Intake
  - name: E-Sign
  - name: Billing
  - name: Settlement Funds
  - name: Referrals
  - name: Communications
  - name: Medical
  - name: Reports & Exports
  - name: Events & Webhooks
paths:
  /api/v1/cases:
    get:
      tags:
        - Cases
      summary: List / search cases
      description: >-
        With no filter parameters this remains the creation-ordered minimal sync
        inventory shipped for document-sync integrations. With view=full or any
        filter it returns the full case serializer. The legacy documents:read
        scope keeps working on this route alongside cases:read.


        Requires the `cases:read or the legacy documents:read` scope. Rate tier:
        `read`.
      operationId: get_cases
      parameters:
        - in: query
          name: after
          schema:
            type: string
            minLength: 1
        - in: query
          name: limit
          schema:
            type: integer
            minimum: 1
            maximum: 500
            default: 100
        - in: query
          name: includeDeleted
          schema:
            type: string
            enum:
              - 'true'
              - 'false'
            default: 'false'
        - in: query
          name: view
          schema:
            type: string
            enum:
              - sync
              - full
        - in: query
          name: caseState
          schema:
            type: string
            minLength: 1
            maxLength: 100
        - in: query
          name: caseType
          schema:
            type: string
            minLength: 1
            maxLength: 100
        - in: query
          name: caseTypeId
          schema:
            anyOf:
              - type: string
                minLength: 1
                maxLength: 200
              - type: string
                pattern: '^legacy:'
        - in: query
          name: attorneyId
          schema:
            type: string
            minLength: 1
            maxLength: 200
        - in: query
          name: tag
          schema:
            type: string
            minLength: 1
            maxLength: 100
        - in: query
          name: createdAfter
          schema:
            type: string
        - in: query
          name: createdBefore
          schema:
            type: string
        - in: query
          name: updatedAfter
          schema:
            type: string
        - in: query
          name: updatedBefore
          schema:
            type: string
        - in: query
          name: q
          schema:
            type: string
            minLength: 2
            maxLength: 200
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CasesListResponse'
        '400':
          description: Validation failed (VALIDATION_FAILED).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Missing, invalid, or expired API key (UNAUTHORIZED).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: API key lacks the required scope (FORBIDDEN).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Resource not found in the caller’s organization (NOT_FOUND).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Rate limit exceeded (RATE_LIMITED). Honor Retry-After.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - integrationApiKey: []
components:
  schemas:
    CasesListResponse:
      type: object
      properties:
        success:
          type: boolean
          const: true
        cases:
          type: array
          items:
            anyOf:
              - $ref: '#/components/schemas/SyncInventoryCase'
              - $ref: '#/components/schemas/Case'
          description: >-
            Without filter parameters (and without view=full) this is the
            shipped minimal sync inventory (SyncInventoryCase). With view=full
            or any filter it is the full Case serializer.
        nextCursor:
          type:
            - string
            - 'null'
      required:
        - success
        - cases
        - nextCursor
    ErrorResponse:
      type: object
      properties:
        success:
          type: boolean
          const: false
        error:
          type: string
          description: >-
            Human-readable error message. 5xx responses are always scrubbed to
            "Internal server error".
        code:
          type: string
          description: >-
            Stable machine-readable error code (ErrorCode), e.g. UNAUTHORIZED,
            FORBIDDEN, VALIDATION_FAILED, NOT_FOUND, INVALID_STATE_TRANSITION,
            DUPLICATE_ENTRY, STALE_REVISION, IDEMPOTENCY_IN_PROGRESS,
            IDEMPOTENCY_CONFLICT, RATE_LIMITED, INTERNAL_ERROR.
      required:
        - success
        - error
        - code
    SyncInventoryCase:
      type: object
      properties:
        id:
          type: string
        sequenceId:
          anyOf:
            - type: string
            - type: number
            - type: 'null'
        caseState:
          type: number
          description: Internal numeric case state (legacy sync-inventory view only).
        createdAt:
          type: string
          description: ISO-8601 UTC timestamp
        updatedAt:
          type: string
          description: ISO-8601 UTC timestamp
        deletedAt:
          type:
            - string
            - 'null'
          description: ISO-8601 UTC timestamp
      required:
        - id
        - sequenceId
        - caseState
        - createdAt
        - updatedAt
        - deletedAt
    Case:
      type: object
      properties:
        id:
          type: string
        sequenceId:
          anyOf:
            - type: string
            - type: number
            - type: 'null'
        firstName:
          type:
            - string
            - 'null'
        lastName:
          type:
            - string
            - 'null'
        email:
          type:
            - string
            - 'null'
        phone:
          type:
            - string
            - 'null'
        city:
          type:
            - string
            - 'null'
        state:
          type:
            - string
            - 'null'
        zipCode:
          type:
            - string
            - 'null'
        description:
          type:
            - string
            - 'null'
        intakeNotes:
          type:
            - string
            - 'null'
        injuryDescription:
          type:
            - string
            - 'null'
        caseType:
          type:
            - string
            - 'null'
        subCaseType:
          type:
            - string
            - 'null'
        caseState:
          type: string
          description: >-
            Curated stable state name from the published vocabulary (never the
            internal numeric enum).
        matterStage:
          type:
            - string
            - 'null'
        matterStatus:
          type:
            - string
            - 'null'
        caseSource:
          type:
            - string
            - 'null'
        caseMatchMode:
          type:
            - string
            - 'null'
        organizationId:
          type:
            - string
            - 'null'
        attorneyId:
          type:
            - string
            - 'null'
        plaintiffId:
          type:
            - string
            - 'null'
        externalId:
          type:
            - string
            - 'null'
        partnerId:
          type:
            - string
            - 'null'
        partnerName:
          type:
            - string
            - 'null'
        partnerResult:
          type:
            - string
            - 'null'
        partnerPriceCents:
          type:
            - integer
            - 'null'
          description: Integer amount in cents
        highValue:
          type: boolean
        vetted:
          type: boolean
        isCommercial:
          type: boolean
        trialBound:
          type:
            - boolean
            - 'null'
        caseScore:
          type:
            - number
            - 'null'
        projectedWinRate:
          type:
            - number
            - 'null'
        projectedFeeAmountCents:
          type:
            - integer
            - 'null'
          description: Integer amount in cents
        projectedSettlementDate:
          type:
            - string
            - 'null'
          description: ISO-8601 UTC timestamp
        projectedSettlementDatePrecision:
          type:
            - string
            - 'null'
          enum:
            - exact
            - quarter
            - half_year
            - tbd
            - null
        projectedSettlementDateLabel:
          type:
            - string
            - 'null'
        estimatedSettlementMinCents:
          type:
            - integer
            - 'null'
          description: Integer amount in cents
        estimatedSettlementMaxCents:
          type:
            - integer
            - 'null'
          description: Integer amount in cents
        estimatedTimeToResolution:
          type:
            - number
            - 'null'
        settlementAmountCents:
          type:
            - integer
            - 'null'
          description: Integer amount in cents
        settlementDate:
          type:
            - string
            - 'null'
          description: ISO-8601 UTC timestamp
        recoveryAmountCents:
          type:
            - integer
            - 'null'
          description: Integer amount in cents
        recoveryDate:
          type:
            - string
            - 'null'
          description: ISO-8601 UTC timestamp
        attorneyFeePercentage:
          type:
            - number
            - 'null'
        dateOfIncident:
          type:
            - string
            - 'null'
          description: ISO-8601 UTC timestamp
        resolutionDate:
          type:
            - string
            - 'null'
          description: ISO-8601 UTC timestamp
        caseMatchDate:
          type:
            - string
            - 'null'
          description: ISO-8601 UTC timestamp
        caseReviewedDate:
          type:
            - string
            - 'null'
          description: ISO-8601 UTC timestamp
        closedOn:
          type:
            - string
            - 'null'
          description: ISO-8601 UTC timestamp
        createdAt:
          type: string
          description: ISO-8601 UTC timestamp
        updatedAt:
          type: string
          description: ISO-8601 UTC timestamp
        deletedAt:
          type:
            - string
            - 'null'
          description: ISO-8601 UTC timestamp
        dateOfBirth:
          type:
            - string
            - 'null'
          description: >-
            pii:read-gated — omitted entirely (not blanked) when the key lacks
            the scope.
      required:
        - id
        - sequenceId
        - firstName
        - lastName
        - email
        - phone
        - city
        - state
        - zipCode
        - description
        - intakeNotes
        - injuryDescription
        - caseType
        - subCaseType
        - caseState
        - matterStage
        - matterStatus
        - caseSource
        - caseMatchMode
        - organizationId
        - attorneyId
        - plaintiffId
        - externalId
        - partnerId
        - partnerName
        - partnerResult
        - partnerPriceCents
        - highValue
        - vetted
        - isCommercial
        - trialBound
        - caseScore
        - projectedWinRate
        - projectedFeeAmountCents
        - projectedSettlementDate
        - projectedSettlementDatePrecision
        - projectedSettlementDateLabel
        - estimatedSettlementMinCents
        - estimatedSettlementMaxCents
        - estimatedTimeToResolution
        - settlementAmountCents
        - settlementDate
        - recoveryAmountCents
        - recoveryDate
        - attorneyFeePercentage
        - dateOfIncident
        - resolutionDate
        - caseMatchDate
        - caseReviewedDate
        - closedOn
        - createdAt
        - updatedAt
        - deletedAt
  securitySchemes:
    integrationApiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Org-issued integration API key (service account credential). The
        plaintext secret is shown once at creation.

````