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

# List bank deposits

> Deposits into the organization's connected bank accounts: credits only, posted only unless `includePending=true`. Each row says whether it is still the row to use (`status`, `supersededBy`), how the platform reconciled it against payer ERAs (`platformMatch`) and your installation's own matches (`appMatches`). Sync with `updatedSince` + `cursorId`. Each deposit carries the bank's description; merchant text is never returned. Requires read:bank_transactions. Facility-limited API keys are refused.



## OpenAPI

````yaml /openapi-v4.json get /bank-transactions
openapi: 3.0.0
info:
  title: Max AI Public API
  description: API for third-party marketplace apps
  version: '4.0'
  contact: {}
servers:
  - url: https://api.maxcare.ai/v4
security: []
tags: []
paths:
  /bank-transactions:
    get:
      tags:
        - Bank Transactions
      summary: List bank deposits
      description: >-
        Deposits into the organization's connected bank accounts: credits only,
        posted only unless `includePending=true`. Each row says whether it is
        still the row to use (`status`, `supersededBy`), how the platform
        reconciled it against payer ERAs (`platformMatch`) and your
        installation's own matches (`appMatches`). Sync with `updatedSince` +
        `cursorId`. Each deposit carries the bank's description; merchant text
        is never returned. Requires read:bank_transactions. Facility-limited API
        keys are refused.
      operationId: BankTransactionsPublicController_listBankTransactions
      parameters:
        - name: page
          required: false
          in: query
          description: Page number (1-indexed)
          schema:
            default: 1
            example: 1
        - name: pageSize
          required: false
          in: query
          description: Number of items per page (max 100)
          schema:
            default: 100
            example: 100
        - name: includePending
          required: false
          in: query
          description: >-
            Include deposits the bank still reports as pending. Defaults to
            false. A pending deposit is replaced by a NEW row when it posts: the
            pending row turns `superseded` and names the posted row in
            `supersededBy`.
          schema:
            default: false
            type: boolean
        - name: bankAccountId
          required: false
          in: query
          description: >-
            Only deposits into this bank account (`bka_…`). An account outside
            your organization is a 404.
          schema:
            example: bka_5f1c0000000040000000000000000001
            type: string
        - name: updatedSince
          required: false
          in: query
          description: >-
            Only deposits whose record changed at/after this instant (ISO 8601
            with an explicit UTC offset). Results are always ordered by
            `updatedAt` (millisecond) then `id`. A deposit changes when it
            posts, is excluded, gains or loses an ERA link, or an app match is
            recorded or revoked on it. Walk with `cursorId`; boundary rows
            re-deliver, so dedupe on `id`. Overlap your stored cursor by a few
            minutes: a change is stamped when its transaction starts and becomes
            visible when it commits.
          schema:
            example: '2026-10-18T00:00:00.000Z'
            type: string
        - name: updatedUntil
          required: false
          in: query
          description: >-
            Only deposits whose record changed at/before this instant. Pin it to
            freeze a walk's window.
          schema:
            example: '2026-10-19T00:00:00.000Z'
            type: string
        - name: cursorId
          required: false
          in: query
          description: >-
            Id of the last deposit you consumed (`btx_…`), for a keyset walk:
            pass it with `updatedSince` set to that row's `updatedAt` and always
            request page 1. `pagination.totalCount` then counts from the
            cursor's millisecond and shrinks as you walk; stop on a short page.
          schema:
            example: btx_5f1c0000000040000000000000000001
            type: string
        - name: X-Organization-Id
          in: header
          required: true
          schema:
            type: string
          description: Target clinic organization ID
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListBankTransactionsSuccessResponse'
        '400':
          description: Missing or invalid request parameter
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiBadRequestResponse'
        '401':
          description: Invalid or missing API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiUnauthorizedResponse'
        '403':
          description: Insufficient scope
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiForbiddenResponse'
        '404':
          description: Resource not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiNotFoundResponse'
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiRateLimitResponse'
      security:
        - api-key: []
components:
  schemas:
    ListBankTransactionsSuccessResponse:
      type: object
      properties:
        code:
          type: string
          description: Response code
          example: success
        data:
          $ref: '#/components/schemas/ListBankTransactionsResponseData'
      required:
        - code
        - data
    PublicApiBadRequestResponse:
      type: object
      properties:
        code:
          type: string
          description: Error code
          example: bad_request
        message:
          type: string
          description: Human-readable error message
          example: '''id'' must be a valid UUID'
        trace_id:
          type: string
          description: Trace ID for debugging
          example: 550e8400-e29b-41d4-a716-446655440000
      required:
        - code
        - message
        - trace_id
    PublicApiUnauthorizedResponse:
      type: object
      properties:
        code:
          type: string
          description: Error code
          example: unauthorized
        message:
          type: string
          description: Human-readable error message
          example: Invalid or missing API key
        trace_id:
          type: string
          description: Trace ID for debugging
          example: 550e8400-e29b-41d4-a716-446655440000
      required:
        - code
        - message
        - trace_id
    PublicApiForbiddenResponse:
      type: object
      properties:
        code:
          type: string
          description: Error code
          example: forbidden
        message:
          type: string
          description: Human-readable error message
          example: Insufficient scope
        trace_id:
          type: string
          description: Trace ID for debugging
          example: 550e8400-e29b-41d4-a716-446655440000
      required:
        - code
        - message
        - trace_id
    PublicApiNotFoundResponse:
      type: object
      properties:
        code:
          type: string
          description: Error code
          example: not_found
        message:
          type: string
          description: Human-readable error message
          example: Resource not found
        trace_id:
          type: string
          description: Trace ID for debugging
          example: 550e8400-e29b-41d4-a716-446655440000
      required:
        - code
        - message
        - trace_id
    PublicApiRateLimitResponse:
      type: object
      properties:
        code:
          type: string
          description: Error code
          example: rate_limit_exceeded
        message:
          type: string
          description: Human-readable error message
          example: Rate limit exceeded. Maximum 1000 requests per 60 seconds.
        trace_id:
          type: string
          description: Trace ID for debugging
          example: 550e8400-e29b-41d4-a716-446655440000
      required:
        - code
        - message
        - trace_id
    ListBankTransactionsResponseData:
      type: object
      properties:
        bankTransactions:
          type: array
          items:
            $ref: '#/components/schemas/ExternalBankTransactionResponse'
        pagination:
          $ref: '#/components/schemas/PaginationInfoResponse'
      required:
        - bankTransactions
        - pagination
    ExternalBankTransactionResponse:
      type: object
      properties:
        id:
          type: string
          description: Bank transaction ID
          example: btx_5f1c0000000040000000000000000001
        bankAccountId:
          type: string
          nullable: true
          description: >-
            The connected account (`bka_…`). Null for deposits imported from a
            bank statement upload.
          example: bka_5f1c0000000040000000000000000002
        amount:
          type: string
          description: Deposit amount, positive, as a decimal string
          example: '28412.60'
        direction:
          type: string
          description: 'Always `credit`: this feed returns money in only'
          enum:
            - credit
          example: credit
        transactionDate:
          type: string
          description: The date the bank gives the transaction (YYYY-MM-DD)
          example: '2026-10-14'
        postedDate:
          type: string
          nullable: true
          description: >-
            The date it posted to the account (YYYY-MM-DD, UTC). Null when the
            bank gave none.
          example: '2026-10-14'
        pending:
          type: boolean
          description: Still pending at the bank
          example: false
        source:
          type: string
          description: >-
            `plaid` (synced from the connected account) or `csv` (a bank
            statement upload)
          enum:
            - plaid
            - csv
          example: plaid
        bankRefId:
          type: string
          nullable: true
          description: >-
            The payer's reassociation number: the bank's structured reference or
            check number when it reports one, else the X12 TRN02 or the
            HCCLAIMPMT reference printed in the deposit memo. Compare it with an
            ERA payment's `checkNumber` (835 TRN02) to match a deposit to a
            remittance.
          example: 1SYN000000481
        checkNumber:
          type: string
          nullable: true
          description: Check number, for check deposits
          example: null
        description:
          type: string
          nullable: true
          description: >-
            The bank's description of the deposit as printed (the ACH memo, e.g.
            `ORIG CO NAME:… TRN*1*…`). It can name the receiver or, for a
            consumer payment, the patient who paid. Null when the bank gave
            none.
          example: >-
            ORIG CO NAME:SYNTHETIC PAYER ORIG ID:9000000001 SEC:CCD
            TRN*1*1SYN000000481*1310935772\
        references:
          description: >-
            Every identifier the deposit carries, letters and digits only,
            de-duplicated: the stored reference, the payer's TRN02 or HCCLAIMPMT
            reference printed in the memo, `checkNumber`, the ACH trace number,
            then the memo's IND ID and other printed numbers. Match your own
            remittance reference against this list when it is not the payer's
            TRN02.
          example:
            - 1SYN000000481
            - '021000020000001'
            - '7000001'
          type: array
          items:
            type: string
        counterpartyName:
          type: string
          nullable: true
          description: >-
            The paying company as the ACH memo prints it (the originator, `ORIG
            CO NAME`), single-spaced, on a corporate entry (SEC CCD or CTX)
            only. Null otherwise: a consumer entry (PPD, WEB), a check or a
            wire.
          example: ELEVATE CENTRALP
        status:
          type: string
          description: >-
            Whether this row is the one to use. `available`: use it.
            `superseded`: a pending row replaced by its posted twin (follow
            `supersededBy`). `duplicate`: the same money stored twice; the other
            copy is `available`. `removed`: the deposit is no longer reported
            (e.g. its bank connection was removed). `excluded`: a biller marked
            it as not a payer deposit (patient payment, refund, transfer, fee).
            Only `available` rows are money you can match.
          enum:
            - available
            - superseded
            - duplicate
            - removed
            - excluded
          example: available
        supersededBy:
          type: string
          nullable: true
          description: >-
            For a `superseded` pending row, the posted row that replaced it
            (`btx_…`), preferring one that is not itself excluded. Null
            otherwise. If it is excluded too (a duplicate or removed copy), no
            live row carries the money and a match on it returns 409.
          example: null
        platformMatch:
          $ref: '#/components/schemas/BankTransactionPlatformMatch'
        appMatches:
          description: >-
            YOUR installation's active matches on this deposit. Other apps'
            matches are never shown.
          type: array
          items:
            $ref: '#/components/schemas/BankTransactionAppMatch'
        updatedAt:
          type: string
          description: >-
            When the record last changed (ISO 8601, millisecond). The delta
            cursor's timestamp half.
          example: '2026-10-14T09:12:40.123Z'
      required:
        - id
        - bankAccountId
        - amount
        - direction
        - transactionDate
        - postedDate
        - pending
        - source
        - bankRefId
        - checkNumber
        - description
        - references
        - counterpartyName
        - status
        - supersededBy
        - platformMatch
        - appMatches
        - updatedAt
    PaginationInfoResponse:
      type: object
      properties:
        page:
          type: number
          description: Current page number
          example: 1
        pageSize:
          type: number
          description: Items per page
          example: 100
        totalCount:
          type: number
          description: Total number of items
          example: 250
        totalPages:
          type: number
          description: Total number of pages
          example: 3
      required:
        - page
        - pageSize
        - totalCount
        - totalPages
    BankTransactionPlatformMatch:
      type: object
      properties:
        status:
          type: string
          description: >-
            The platform's reconciliation of this deposit against payer ERAs:
            `unmatched`; `matched` (fully matched, automatically or by a
            biller); `partial` (matched ERAs explain part of the amount);
            `excluded` (a biller or the platform marked it as not an ERA
            deposit; see `status` for why it is unusable, if it is);
            `unrecognized` for a stored value this API does not know.
          enum:
            - unmatched
            - matched
            - partial
            - excluded
            - unrecognized
          example: matched
        eraPaymentIds:
          description: >-
            ERA payments (`erp_…`, `GET /v4/era-payments`) linked to this
            deposit by the platform, whether suggested (pending review) or
            confirmed/manual. Rejected suggestions are left out.
          example:
            - erp_5f1c0000000040000000000000000003
          type: array
          items:
            type: string
        cardPayout:
          type: boolean
          description: >-
            True when a card-processor payout (e.g. ModMed Pay) is matched to
            this deposit.
          example: false
      required:
        - status
        - eraPaymentIds
        - cardPayout
    BankTransactionAppMatch:
      type: object
      properties:
        id:
          type: string
          description: Deposit match ID
          example: dpm_5f1c0000000040000000000000000004
        kind:
          type: string
          enum:
            - pharmacy_remittance
            - other
          example: pharmacy_remittance
        externalRef:
          type: string
          description: Your own identifier for the remittance this deposit paid
          example: elevate:EB-1
        amount:
          type: string
          description: Amount of the deposit you allocated to it (decimal string)
          example: '41906.25'
        status:
          type: string
          description: >-
            `active`, or `contested` when a confirmed/manual platform ERA link
            or a card payout now also holds this deposit. A contested match is
            not revoked; decide whether to keep it.
          enum:
            - active
            - contested
          example: active
        createdAt:
          type: string
          description: When the match was recorded (ISO 8601)
          example: '2026-10-14T09:12:40.123Z'
      required:
        - id
        - kind
        - externalRef
        - amount
        - status
        - createdAt
  securitySchemes:
    api-key:
      scheme: bearer
      bearerFormat: JWT
      type: http
      description: Marketplace API key

````

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