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

# List Matters changed since a timestamp

> Returns a minimized current-state projection, not an event log. Results are restricted to the authenticated Source integration and current Client grant.

The final page carries `syncedThrough`: the UTC instant this run is guaranteed to have covered. Pass it as the next run's `updatedSince`. Callers never derive a boundary from their own clock or from the greatest `updatedAt` returned.



## OpenAPI

````yaml /openapi/partner-api-v1.yaml get /v1/matters
openapi: 3.1.0
info:
  title: CasePath IQ Partner API v1
  version: 1.0.0
  summary: Inbound Matter API for approved partner integrations
  license:
    name: Proprietary
    identifier: LicenseRef-Proprietary
  description: >-
    CasePath IQ Partner API v1 for scoped Matter intake, payment observations,
    lifecycle commands and polling. Sandbox callers use a Sandbox Bearer API key
    supplied securely at onboarding; no Microsoft sign-in or IP allowlist setup
    is required for new unrestricted Sandbox keys. Production onboarding is
    separate and is not advertised by this Sandbox specification.


    Every error is `application/problem+json`. Methods a route does not support,
    including `HEAD` and `OPTIONS`, return `405` with an `Allow` header, and
    unknown paths under `/v1` return `404`. Each key is limited to a fixed
    number of requests per minute; `429` and `503` carry `Retry-After`. While
    the platform pauses Partner API writes, every write returns `503
    partner_writes_paused` and reads continue.
servers:
  - url: https://api.sandbox.casepathiq.com
    description: Sandbox testing
security:
  - PartnerKey: []
tags:
  - name: Matters
    description: Place, update, and read partner-owned Matter source data
  - name: Synchronization
    description: Pull minimized current-state changes for one granted Client
  - name: Payments
    description: Record and read immutable external payment evidence
  - name: Lifecycle
    description: Apply explicit, predecessor-bound Matter lifecycle transitions
paths:
  /v1/matters:
    get:
      tags:
        - Synchronization
      summary: List Matters changed since a timestamp
      description: >-
        Returns a minimized current-state projection, not an event log. Results
        are restricted to the authenticated Source integration and current
        Client grant.


        The final page carries `syncedThrough`: the UTC instant this run is
        guaranteed to have covered. Pass it as the next run's `updatedSince`.
        Callers never derive a boundary from their own clock or from the
        greatest `updatedAt` returned.
      operationId: listUpdatedMatters
      parameters:
        - $ref: '#/components/parameters/ClientCodeQuery'
        - name: updatedSince
          in: query
          required: true
          description: >-
            Inclusive UTC lower bound. Use the `syncedThrough` value from the
            last fully applied run, or the initial boundary agreed at
            onboarding. A future instant returns `400 invalid_field`.
          schema:
            type: string
            format: date-time
        - name: pageToken
          in: query
          schema:
            type: string
        - name: limit
          in: query
          schema:
            type: integer
            minimum: 1
            maximum: 200
            default: 100
      responses:
        '200':
          description: Page of changed Matters
          headers:
            X-Request-Id:
              $ref: '#/components/headers/RequestId'
            Cache-Control:
              $ref: '#/components/headers/CacheControl'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MatterListResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
        default:
          $ref: '#/components/responses/Problem'
components:
  parameters:
    ClientCodeQuery:
      name: clientCode
      in: query
      required: true
      description: Granted Local Authority Client code
      schema:
        $ref: '#/components/schemas/ClientCodeValue'
  headers:
    RequestId:
      description: CasePath IQ-generated support correlation identifier
      schema:
        type: string
        example: req_01JEXAMPLE
    CacheControl:
      description: Sensitive responses are not cacheable
      schema:
        type: string
        const: no-store
    RetryAfter:
      description: Seconds to wait before retrying this request
      schema:
        type: integer
        minimum: 1
      example: 30
  schemas:
    MatterListResponse:
      type: object
      additionalProperties: false
      required:
        - matters
        - nextPageToken
        - syncedThrough
      properties:
        matters:
          type: array
          items:
            $ref: '#/components/schemas/MatterSyncItem'
        nextPageToken:
          type:
            - string
            - 'null'
          description: Opaque continuation token; `null` on the final page.
        syncedThrough:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            The UTC instant this run is guaranteed to have covered, and the
            value to send as the next run's `updatedSince`. It is `null` on
            every page except the final one, so a run abandoned part-way cannot
            advance a caller's saved boundary: save it only after every page has
            been applied.


            It is held a short interval behind the run's snapshot boundary so it
            never reports coverage through a window in which writes may still be
            committing, and it is never earlier than the requested
            `updatedSince`. It is returned on the final page even when no Matter
            matched, which is what makes an empty run advance safely. Treat the
            exact lag as a server detail that may change; do not reimplement it
            or add an overlap of your own.
          example: '2026-09-21T01:58:00Z'
    ClientCodeValue:
      type: string
      pattern: ^[A-Z][A-Z0-9]{1,31}$
      example: SDCC
    MatterSyncItem:
      type: object
      additionalProperties: false
      description: >-
        Minimized current-state projection. It deliberately carries no Party,
        address, contact or instruction data: use `etag` to decide which Matters
        actually need a full read, then GET only those.
      required:
        - matterId
        - clientReferenceId
        - clientCode
        - etag
        - status
        - intakeStatus
        - outstandingBalance
        - currency
        - lifecycle
        - payments
        - updatedAt
      properties:
        matterId:
          type: string
        clientReferenceId:
          $ref: '#/components/schemas/ClientReferenceIdValue'
        clientCode:
          $ref: '#/components/schemas/ClientCodeValue'
        etag:
          type: string
          description: >-
            Current entity-tag of the full Matter representation. Unchanged
            against your stored value means nothing you hold is stale, so the
            detail read can be skipped; it is also the `If-Match` value for your
            next write.
          example: '"m1-7f3a9c2b"'
        status:
          type: string
          enum:
            - received
            - in_review
            - active
            - paused
            - closed
        intakeStatus:
          type: string
          enum:
            - needs_review
            - ready
        outstandingBalance:
          $ref: '#/components/schemas/Money'
        currency:
          type: string
          pattern: ^[A-Z]{3}$
        lifecycle:
          $ref: '#/components/schemas/MatterSyncLifecycle'
        payments:
          $ref: '#/components/schemas/MatterSyncPayments'
        updatedAt:
          type: string
          format: date-time
    ProblemDetails:
      type: object
      additionalProperties: false
      required:
        - type
        - title
        - status
        - detail
        - code
      if:
        properties:
          code:
            const: rate_limited
        required:
          - code
      else:
        required:
          - requestId
      properties:
        type:
          type: string
          format: uri-reference
        title:
          type: string
        status:
          type: integer
          minimum: 400
          maximum: 599
        detail:
          type: string
        code:
          type: string
          description: >-
            Stable machine-readable error code. Client software branches on this
            value; it never parses detail. The same codes appear in
            `errors[].code`, where field-level codes such as required_field,
            unknown_field and unsupported_enum point at what to correct.
          enum:
            - balance_mismatch
            - capacity_limited
            - card_number_detected
            - client_not_configured
            - client_scope_denied
            - currency_mismatch
            - effective_date_out_of_range
            - identity_mismatch
            - invalid_credentials
            - invalid_field
            - invalid_page_token
            - invalid_precondition
            - invalid_request
            - invisible_character
            - matter_closed
            - method_not_allowed
            - not_found
            - opening_balance_change_not_allowed
            - partner_writes_paused
            - payload_too_large
            - payment_observation_conflict
            - precondition_failed
            - precondition_required
            - primary_liable_party_required
            - rate_limited
            - recipient_rebind_required
            - request_timeout
            - required_field
            - source_write_conflict
            - stale_lifecycle_precondition
            - stale_lifecycle_retry
            - unavailable
            - unknown_field
            - unprocessable_entity
            - unsupported_enum
            - unsupported_media_type
            - usable_address_required
          example: client_scope_denied
        instance:
          type: string
          format: uri-reference
          description: >-
            Optional server-issued opaque occurrence URI; never contains request
            path or query values, or partner identifiers
        requestId:
          type: string
          description: >-
            Equals the `X-Request-Id` header. Present on every application
            response; absent only on a `rate_limited` response answered by the
            network edge before the request reaches the application.
        errors:
          type: array
          maxItems: 50
          description: At most 50 field-level entries, in the order found.
          items:
            type: object
            additionalProperties: false
            required:
              - pointer
              - code
            properties:
              pointer:
                type: string
              code:
                type: string
      example:
        type: https://api.casepathiq.com/problems/usable_address_required
        title: Usable address required
        status: 400
        detail: >-
          Each Party needs exactly one usable correspondence address that meets
          the letter minimum.
        code: usable_address_required
        requestId: 6f2c1b8e-3a41-4f43-9a55-6b2f0b1b7c10
        errors:
          - pointer: /parties/1/addresses
            code: usable_address_required
    ClientReferenceIdValue:
      type: string
      pattern: ^(?!\.{1,2}$)[A-Za-z0-9._-]{1,128}$
      description: 1-128 characters; `.` and `..` alone are refused.
      example: SDCC-2026-00482
    Money:
      type: string
      pattern: ^(0|[1-9][0-9]*)\.[0-9]{2}$
      maxLength: 15
      example: '1250.00'
    MatterSyncLifecycle:
      type: object
      additionalProperties: false
      description: >-
        Why the Matter is in its current partner-visible state. `reason` and
        `effectiveOn` echo the accepted pause or close command, so a partner can
        reconcile a stopped Matter without a second request. They are `null`
        while no partner hold is active.
      required:
        - hold
        - reason
        - effectiveOn
      properties:
        hold:
          type: string
          enum:
            - none
            - paused
            - closed
        reason:
          type:
            - string
            - 'null'
          enum:
            - client_instruction
            - dispute
            - payment_arrangement
            - legal_review
            - other
            - satisfied
            - withdrawn
            - written_off
            - transferred
            - null
        effectiveOn:
          type:
            - string
            - 'null'
          format: date
    MatterSyncPayments:
      type: object
      additionalProperties: false
      description: >-
        Totals of the Payment observations recorded against this Matter, and the
        most recent one. These are observation totals, not a payment history and
        not a reconciliation statement.
      required:
        - totalPaymentsAmount
        - totalRefundsAmount
        - totalReversalsAmount
        - lastObservation
      properties:
        totalPaymentsAmount:
          $ref: '#/components/schemas/ObservationTotal'
        totalRefundsAmount:
          $ref: '#/components/schemas/ObservationTotal'
        totalReversalsAmount:
          $ref: '#/components/schemas/ObservationTotal'
        lastObservation:
          oneOf:
            - $ref: '#/components/schemas/PaymentObservationSummary'
            - type: 'null'
    ObservationTotal:
      type: string
      pattern: ^(0|[1-9][0-9]*)\.[0-9]{2}$
      description: >-
        Cumulative observation amount; may exceed the individual Money limit
        after repeated payments and refunds.
      example: '1999999999999.98'
    PaymentObservationSummary:
      type: object
      additionalProperties: false
      description: >-
        Most recent Payment observation by effective date, then by acceptance
        time.
      required:
        - externalPaymentId
        - type
        - amount
        - effectiveOn
      properties:
        externalPaymentId:
          $ref: '#/components/schemas/ExternalPaymentIdValue'
        type:
          type: string
          enum:
            - payment
            - refund
            - reversal
        amount:
          $ref: '#/components/schemas/PositiveMoney'
        effectiveOn:
          type: string
          format: date
    ExternalPaymentIdValue:
      type: string
      pattern: ^(?!\.{1,2}$)[A-Za-z0-9._-]{1,128}$
      description: 1-128 characters; `.` and `..` alone are refused.
      example: payobs_01JEXAMPLE
    PositiveMoney:
      type: string
      pattern: ^(0\.(0[1-9]|[1-9][0-9])|[1-9][0-9]*\.[0-9]{2})$
      maxLength: 15
      example: '200.00'
  responses:
    BadRequest:
      description: Validation, schema, enum, money or letter-minimum failure
      headers:
        X-Request-Id:
          $ref: '#/components/headers/RequestId'
        Cache-Control:
          $ref: '#/components/headers/CacheControl'
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
    Unauthorized:
      description: >-
        Missing, malformed, expired, revoked or unknown partner key, an invalid
        edge identity, or a network address outside the key's allowed ranges
        (invalid_credentials). The same neutral 401 is returned for every cause.
      headers:
        X-Request-Id:
          $ref: '#/components/headers/RequestId'
        Cache-Control:
          $ref: '#/components/headers/CacheControl'
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
    Forbidden:
      description: >-
        The key cannot act for this Client code (client_scope_denied). Unknown,
        ungranted and key-restricted Client codes share this response.
      headers:
        X-Request-Id:
          $ref: '#/components/headers/RequestId'
        Cache-Control:
          $ref: '#/components/headers/CacheControl'
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
    TooManyRequests:
      description: >-
        Per-key rate limit (rate_limited), per-Matter daily write cap or pilot
        capacity limit (capacity_limited). Wait for Retry-After before retrying.
      headers:
        X-Request-Id:
          $ref: '#/components/headers/RequestId'
        Cache-Control:
          $ref: '#/components/headers/CacheControl'
        Retry-After:
          $ref: '#/components/headers/RetryAfter'
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
    ServiceUnavailable:
      description: >-
        Transient or fenced failure (unavailable), or Partner API writes paused
        by the platform (partner_writes_paused; reads still work). Retry
        unchanged content after Retry-After.
      headers:
        X-Request-Id:
          $ref: '#/components/headers/RequestId'
        Cache-Control:
          $ref: '#/components/headers/CacheControl'
        Retry-After:
          $ref: '#/components/headers/RetryAfter'
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
    Problem:
      description: RFC 9457 Problem Details error
      headers:
        X-Request-Id:
          $ref: '#/components/headers/RequestId'
        Cache-Control:
          $ref: '#/components/headers/CacheControl'
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
  securitySchemes:
    PartnerKey:
      type: http
      scheme: bearer
      bearerFormat: CasePath IQ partner key
      description: >-
        Environment-specific Integration key. Never paste a live key into
        documentation tooling.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.