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

# Get Transactions

> Get bank transactions across all connected accounts (v2, ClickHouse-backed).

Returns transactions within the specified date range from all linked bank accounts.
Reads from ClickHouse instead of Core API for improved performance.
Supports pagination, category/type/account/amount/merchant filtering, and sorting.

The ``daily_totals`` array in the response reflects the same active filters.
When ``transaction_type=DEBIT`` is applied, all daily net totals will be negative
(debits only, no credits to offset them) — this is intentional and arithmetically consistent.



## OpenAPI

````yaml GET /v2/users/transactions
openapi: 3.1.0
info:
  title: Checkr Money API
  description: >
    Read-only API for personal access token (PAT) users.


    ## Authentication


    Authenticate with `Authorization: Bearer <token>`. Tokens have a `pat_`
    prefix

    and are generated in the Truv web app under Settings → API keys.


    ## Available Endpoints


    This API exposes a subset of read-only endpoints for retrieving financial
    data,

    account links, and user profile information.
  version: 1.0.0
servers:
  - url: https://api.mytruv.com
    description: Production
security:
  - BearerAuth: []
tags:
  - name: users
    description: User profile — read-only access to the authenticated user's profile.
  - name: financial-data
    description: >-
      Financial data — balances, transactions, income, spending, liabilities,
      and balance history.
  - name: links
    description: >-
      Account links — list connected financial institutions and payroll
      providers.
paths:
  /v2/users/transactions:
    get:
      tags:
        - financial-data
      summary: Get User Bank Transactions V2
      description: >-
        Get bank transactions across all connected accounts (v2,
        ClickHouse-backed).


        Returns transactions within the specified date range from all linked
        bank accounts.

        Reads from ClickHouse instead of Core API for improved performance.

        Supports pagination, category/type/account/amount/merchant filtering,
        and sorting.


        The ``daily_totals`` array in the response reflects the same active
        filters.

        When ``transaction_type=DEBIT`` is applied, all daily net totals will be
        negative

        (debits only, no credits to offset them) — this is intentional and
        arithmetically consistent.
      operationId: listTransactionsV2
      parameters:
        - name: transacted_at_from
          in: query
          required: true
          schema:
            type: string
            description: Start date for the transaction window (inclusive, YYYY-MM-DD).
            examples:
              - '2025-01-01'
            title: Transacted At From
          description: Start date for the transaction window (inclusive, YYYY-MM-DD).
        - name: transacted_at_to
          in: query
          required: false
          schema:
            type: string
            description: >-
              End date for the transaction window (inclusive, YYYY-MM-DD).
              Defaults to today.
            examples:
              - '2025-12-31'
            title: Transacted At To
          description: >-
            End date for the transaction window (inclusive, YYYY-MM-DD).
            Defaults to today.
        - name: categories
          in: query
          required: false
          schema:
            description: >-
              Comma-separated category slugs to include (e.g.
              'income,transfer'). Omit to include all categories.
            examples:
              - income,transfer
            title: Categories
            type:
              - string
              - 'null'
            maxLength: 1000
          description: >-
            Comma-separated category slugs to include (e.g. 'income,transfer').
            Omit to include all categories.
        - name: transaction_type
          in: query
          required: false
          schema:
            description: >-
              Filter by transaction type. Omit to include both debits and
              credits.
            examples:
              - DEBIT
            title: Transaction Type
            enum:
              - DEBIT
              - CREDIT
            type:
              - string
              - 'null'
          description: Filter by transaction type. Omit to include both debits and credits.
        - name: account_ids
          in: query
          required: false
          schema:
            description: >-
              Comma-separated account IDs to include. Omit to include all
              accounts.
            examples:
              - acc_001,acc_002
            title: Account Ids
            type:
              - string
              - 'null'
          description: >-
            Comma-separated account IDs to include. Omit to include all
            accounts.
        - name: min_amount
          in: query
          required: false
          schema:
            description: Minimum transaction amount (absolute value). Inclusive.
            examples:
              - '10.00'
            title: Min Amount
            type:
              - number
              - string
              - 'null'
            pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          description: Minimum transaction amount (absolute value). Inclusive.
        - name: max_amount
          in: query
          required: false
          schema:
            description: Maximum transaction amount (absolute value). Inclusive.
            examples:
              - '500.00'
            title: Max Amount
            type:
              - number
              - string
              - 'null'
            pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          description: Maximum transaction amount (absolute value). Inclusive.
        - name: merchant
          in: query
          required: false
          schema:
            description: Case-insensitive substring match on merchant name or description.
            examples:
              - starbucks
            title: Merchant
            type:
              - string
              - 'null'
          description: Case-insensitive substring match on merchant name or description.
        - name: exclude_categories
          in: query
          required: false
          schema:
            description: >-
              Comma-separated category slugs to exclude (e.g.
              'transfer,uncategorized').
            title: Exclude Categories
            type:
              - string
              - 'null'
            maxLength: 1000
          description: >-
            Comma-separated category slugs to exclude (e.g.
            'transfer,uncategorized').
        - name: sort_by
          in: query
          required: false
          schema:
            enum:
              - date
              - amount
              - review
            type: string
            description: >-
              Sort transactions by date, by absolute amount, or by `review`: the
              queue's own order, most damaging question first. `review` ignores
              `sort_order` and requires `needs_review`.
            examples:
              - date
            default: date
            title: Sort By
          description: >-
            Sort transactions by date, by absolute amount, or by `review`: the
            queue's own order, most damaging question first. `review` ignores
            `sort_order` and requires `needs_review`.
        - name: sort_order
          in: query
          required: false
          schema:
            enum:
              - asc
              - desc
            type: string
            description: 'Sort direction: ascending or descending.'
            examples:
              - desc
            default: desc
            title: Sort Order
          description: 'Sort direction: ascending or descending.'
        - name: page
          in: query
          required: false
          schema:
            description: >-
              1-based page number, defaulting to 1 when paginating. Pagination
              is off unless page or page_size is set; with neither set, all
              matching transactions are returned in one response.
            examples:
              - 1
            title: Page
            type:
              - integer
              - 'null'
            minimum: 1
          description: >-
            1-based page number, defaulting to 1 when paginating. Pagination is
            off unless page or page_size is set; with neither set, all matching
            transactions are returned in one response.
        - name: page_size
          in: query
          required: false
          schema:
            description: >-
              Transactions per page (min 10, max 500), defaulting to 500 when
              paginating. Pagination is off unless page or page_size is set;
              with neither set, all matching transactions are returned in one
              response.
            examples:
              - 100
            title: Page Size
            type:
              - integer
              - 'null'
            maximum: 500
            minimum: 10
          description: >-
            Transactions per page (min 10, max 500), defaulting to 500 when
            paginating. Pagination is off unless page or page_size is set; with
            neither set, all matching transactions are returned in one response.
        - name: include_hidden
          in: query
          required: false
          schema:
            type: boolean
            description: >-
              Include user-hidden transactions alongside visible ones. Hidden
              transactions can be unhidden; permanently deleted transactions are
              never returned regardless.
            examples:
              - true
            default: false
            title: Include Hidden
          description: >-
            Include user-hidden transactions alongside visible ones. Hidden
            transactions can be unhidden; permanently deleted transactions are
            never returned regardless.
        - name: review_state
          in: query
          required: false
          schema:
            anyOf:
              - $ref: '#/components/schemas/ReviewState'
              - type: 'null'
            description: >-
              Keep only transactions in this review state, meaning whether the
              user has acted on them. Omit for every state. Note `unreviewed`
              covers everything the user has simply never touched, which is most
              of their history: for the needs-review chip use `needs_review`
              instead.
            examples:
              - unreviewed
            title: Review State
          description: >-
            Keep only transactions in this review state, meaning whether the
            user has acted on them. Omit for every state. Note `unreviewed`
            covers everything the user has simply never touched, which is most
            of their history: for the needs-review chip use `needs_review`
            instead.
        - name: needs_review
          in: query
          required: false
          schema:
            type: boolean
            description: >-
              Keep only the transactions we would actually ask about: the
              current review queue, with anything the user has answered or
              already settled by editing the transaction or making a merchant
              rule removed. This is what the `Needs review` chip filters on, and
              `count` on the response is the number beside it.
            examples:
              - true
            default: false
            title: Needs Review
          description: >-
            Keep only the transactions we would actually ask about: the current
            review queue, with anything the user has answered or already settled
            by editing the transaction or making a merchant rule removed. This
            is what the `Needs review` chip filters on, and `count` on the
            response is the number beside it.
      responses:
        '200':
          description: Paginated bank transactions (v2, ClickHouse-backed).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BankTransactionsReportSchema'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    ReviewState:
      type: string
      enum:
        - unreviewed
        - reviewed
        - dismissed
      title: ReviewState
      description: >-
        ``UNREVIEWED`` is the read-side default for a transaction with no review
        row, and is

        never written, so an absent row and an explicit unreviewed row mean the
        same thing.
    BankTransactionsReportSchema:
      properties:
        count:
          type: integer
          title: Count
          description: Total transactions matching the filters, across all pages.
        accounts:
          items:
            $ref: '#/components/schemas/Account'
          type: array
          title: Accounts
          description: Accounts the returned transactions belong to.
        transactions:
          items:
            $ref: '#/components/schemas/TransactionSchema'
          type: array
          title: Transactions
        daily_totals:
          items:
            $ref: '#/components/schemas/DailyTotal'
          type: array
          title: Daily Totals
          description: Net total per calendar day, reflecting the same filters.
        merchant_logos:
          additionalProperties:
            type:
              - string
              - 'null'
          type: object
          title: Merchant Logos
          description: Logo URL per merchant name present in the response.
        next:
          title: Next
          description: Relative URL of the next page, when paginated.
          type:
            - string
            - 'null'
        previous:
          title: Previous
          description: Relative URL of the previous page, when paginated.
          type:
            - string
            - 'null'
      type: object
      required:
        - count
        - accounts
        - transactions
      title: BankTransactionsReportSchema
      description: >-
        Response model of the v2 transaction endpoints.


        The route class returns a ``JSONResponse``, so this shapes the OpenAPI
        spec but

        never validates or serializes a payload.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    Account:
      properties:
        id:
          title: Id
          examples:
            - 24d7e80942ce4ad58a93f70ce4115f5c
          type:
            - string
            - 'null'
        created_at:
          title: Created At
          examples:
            - '2022-05-04T11:30:00Z'
          type:
            - string
            - 'null'
          format: date-time
        updated_at:
          title: Updated At
          examples:
            - '2022-05-04T12:00:00Z'
          type:
            - string
            - 'null'
          format: date-time
        type:
          $ref: '#/components/schemas/AccountType'
          examples:
            - CHECKING
        subtype:
          anyOf:
            - $ref: '#/components/schemas/AccountSubtype'
            - type: 'null'
          examples:
            - MONEY_MARKET
        mask:
          title: Mask
          examples:
            - '6789'
          type:
            - string
            - 'null'
        nickname:
          title: Nickname
          examples:
            - My account
          type:
            - string
            - 'null'
        balances:
          $ref: '#/components/schemas/AccountBalances'
      additionalProperties: true
      type: object
      required:
        - type
        - balances
      title: Account
    TransactionSchema:
      properties:
        id:
          title: Id
          examples:
            - 24d7e80942ce4ad58a93f70ce4115f5c
          type:
            - string
            - 'null'
        created_at:
          title: Created At
          examples:
            - '2022-05-04T11:30:00Z'
          type:
            - string
            - 'null'
          format: date-time
        updated_at:
          title: Updated At
          examples:
            - '2022-05-04T12:00:00Z'
          type:
            - string
            - 'null'
          format: date-time
        account_id:
          title: Account Id
          examples:
            - 68a7e80942ce4ad58a93f70ce411549a
          type:
            - string
            - 'null'
        external_id:
          type: string
          title: External Id
          examples:
            - external_key_243901
        amount:
          title: Amount
          examples:
            - '100.00'
          type:
            - string
            - 'null'
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
        currency_code:
          title: Currency Code
          examples:
            - USD
          type:
            - string
            - 'null'
        check_number:
          title: Check Number
          examples:
            - '123456'
          type:
            - string
            - 'null'
        categories:
          title: Categories
          examples:
            - - Transfer
          items:
            type: string
          type:
            - array
            - 'null'
        description:
          type: string
          title: Description
          examples:
            - Some transaction
        status:
          $ref: '#/components/schemas/Status5'
          examples:
            - POSTED
        type:
          $ref: '#/components/schemas/Type7'
          examples:
            - DEBIT
        posted_at:
          title: Posted At
          examples:
            - '2022-05-04T11:30:00Z'
          type:
            - string
            - 'null'
          format: date-time
        transacted_at:
          type: string
          format: date-time
          title: Transacted At
          examples:
            - '2022-05-04T11:30:00Z'
        memo:
          title: Memo
          examples:
            - ''
          type:
            - string
            - 'null'
        merchant_name:
          title: Merchant Name
          examples:
            - Starbucks
          type:
            - string
            - 'null'
        merchant_category_code:
          title: Merchant Category Code
          examples:
            - 5967
          type:
            - number
            - 'null'
        location:
          $ref: '#/components/schemas/Location'
        date:
          title: Date
          description: Calendar day of the transaction in the user's timezone (YYYY-MM-DD).
          examples:
            - '2026-07-14'
          type:
            - string
            - 'null'
        category_slugs:
          items:
            type: string
          type: array
          title: Category Slugs
          description: Effective categories as stable slugs.
          examples:
            - - entertainment
              - streaming_services
        is_internal_transfer:
          type: boolean
          title: Is Internal Transfer
          description: >-
            Whether the transaction moves money between the user's own accounts.
            Resolves a per-transaction override first, then a merchant rule,
            then detection.
        is_recurring:
          type: boolean
          title: Is Recurring
          description: >-
            Whether the transaction is part of a recurring series (subscription
            or bill). Resolves a per-transaction override first, then a merchant
            rule, then detection: membership in a detected series, or a charge
            at a detected merchant whose amount matches that series. An explicit
            user or rule value always wins over detection.
        note:
          title: Note
          description: >-
            User-authored free text about this transaction, or null when the
            user has written none. Distinct from `memo`, which is the bank's own
            string.
          examples:
            - Reimbursed by work
          type:
            - string
            - 'null'
        review_state:
          $ref: '#/components/schemas/ReviewState'
          description: >-
            Whether the user has settled this transaction: `unreviewed` until
            they confirm or dismiss it, then `reviewed` or `dismissed`. A
            transaction nobody has reviewed yet reports `unreviewed` rather than
            null.
          examples:
            - unreviewed
        review_reason:
          anyOf:
            - $ref: '#/components/schemas/ReviewReason'
            - type: 'null'
          description: >-
            Why this transaction is still worth asking about, for a surface that
            says so. On every row read, so a badge outside the review screens
            can be honest; null when the transaction is not in the review queue.
          examples:
            - high_amount
        category_suggestions:
          title: Category Suggestions
          description: >-
            Up to two categories to put in front of the picker, drawn from what
            this user already uses at this merchant and then across their own
            history. Stable slugs, the same form as `category_slugs` and as the
            picker's own `slug`. Only on the single-transaction read, and only
            for a transaction in the review queue.
          examples:
            - - groceries
              - shopping
          items:
            type: string
          type:
            - array
            - 'null'
        recurring_frequency:
          title: Recurring Frequency
          description: >-
            Cadence of the series this merchant belongs to, as the same short
            code the recurring endpoints use (`M`, `BW`, `SM`, `W`), which the
            client renders in words. Null when no series was detected.
            Single-transaction read only.
          examples:
            - M
          type:
            - string
            - 'null'
      additionalProperties: true
      type: object
      required:
        - external_id
        - description
        - status
        - type
        - transacted_at
        - location
        - date
        - category_slugs
        - is_internal_transfer
        - is_recurring
        - note
        - review_state
      title: TransactionSchema
      description: >-
        A transaction as the v2 endpoints return it: the bank record plus the
        effective flags.


        The fields below come from the ClickHouse read path, not from Truv's
        spec, and

        carry no default: the read path fills every one on every row, and a
        default would

        only make the spec advertise them as optional.
    DailyTotal:
      properties:
        date:
          type: string
          title: Date
        net_total:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Net Total
        transaction_count:
          type: integer
          title: Transaction Count
      type: object
      required:
        - date
        - net_total
        - transaction_count
      title: DailyTotal
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
    AccountType:
      type: string
      enum:
        - CHECKING
        - SAVINGS
        - LOAN
        - CREDIT_CARD
        - INVESTMENT
        - LINE_OF_CREDIT
        - MORTGAGE
        - PROPERTY
        - CASH
        - INSURANCE
        - PREPAID
        - CHECKING_LINE_OF_CREDIT
        - ANY
      title: AccountType
      description: The account's type
    AccountSubtype:
      type: string
      enum:
        - MONEY_MARKET
        - CERTIFICATE_OF_DEPOSIT
        - AUTO
        - STUDENT
        - SMALL_BUSINESS
        - PERSONAL
        - PERSONAL_WITH_COLLATERAL
        - HOME_EQUITY
        - BOAT
        - POWERSPORTS
        - RV
        - HELOC
        - PLAN_401_K
        - PLAN_403_B
        - PLAN_529
        - IRA
        - ROLLOVER_IRA
        - ROTH_IRA
        - TAXABLE
        - NON_TAXABLE
        - BROKERAGE
        - TRUST
        - UNIFORM_GIFTS_TO_MINORS_ACT
        - PLAN_457
        - PENSION
        - EMPLOYEE_STOCK_OWNERSHIP_PLAN
        - SIMPLIFIED_EMPLOYEE_PENSION
        - SIMPLE_IRA
        - PLAN_ROTH_401_K
        - FIXED_ANNUITY
        - VARIABLE_ANNUITY
        - HSA
        - TAX_FREE_SAVINGS_ACCOUNT
        - INDIVIDUAL
        - REGISTERED_RETIREMENT_INCOME_FUND
        - CASH_MANAGEMENT_ACCOUNT
        - EMPLOYEE_STOCK_PURCHASE_PLAN
        - REGISTERED_EDUCATION_SAVINGS_PLAN
        - PROFIT_SHARING_PLAN
        - UNIFORM_TRANSFER_TO_MINORS_ACT
        - PLAN_401_A
        - SARSEP_IRA
        - FIXED_ANNUITY_TRADITIONAL_IRA
        - VARIABLE_ANNUITY_TRADITIONAL_IRA
        - SEPP_IRA
        - INHERITED_TRADITIONAL_IRA
        - FIXED_ANNUITY_ROTH_IRA
        - VARIABLE_ANNUITY_ROTH_IRA
        - INHERITED_ROTH_IRA
        - COVERDELL
        - ADVISORY_ACCOUNT
        - BROKERAGE_MARGIN
        - CHARITABLE_GIFT_ACCOUNT
        - CHURCH_ACCOUNT
        - CONSERVATORSHIP
        - CUSTODIAL
        - DEFINED_BENEFIT_PLAN
        - DEFINED_CONTRIBUTION_PLAN
        - EDUCATIONAL
        - ESTATE
        - EXECUTOR
        - GROUP_RETIREMENT_SAVINGS_PLAN
        - GUARANTEED_INVESTMENT_CERTIFICATE
        - HRA
        - INDEXED_ANNUITY
        - INVESTMENT_CLUB
        - IRREVOCABLE_TRUST
        - JOINT_TENANTS_BY_ENTIRITY
        - JOINT_TENANTS_COMMUNITY_PROPERTY
        - JOINT_TENANTS_IN_COMMON
        - JOINT_TENANTS_WITH_RIGHTS_OF_SURVIVORSHIP
        - KEOUGH_PLAN
        - LIFE_INCOME_FUND
        - LIVING_TRUST
        - LOCKED_IN_RETIREMENT_ACCOUNT
        - LOCKED_IN_RETIREMENT_INVESTMENT_FUND
        - LOCKED_IN_RETIREMENT_SAVINGS_ACCOUNT
        - MONEY_PURCHASE_PLAN
        - PARTNERSHIP
        - PLAN_409_A
        - PLAN_ROTH_403_B
        - REGISTERED_DISABILITY_SAVINGS_PLAN
        - REGISTERED_LOCKED_IN_SAVINGS_PLAN
        - REGISTERED_PENSION_PLAN
        - REGISTERED_RETIREMENT_SAVINGS_PLAN
        - REVOCABLE_TRUST
        - ROTH_CONVERSION
        - SOLE_PROPRIETORSHIP
        - SPOUSAL_IRA
        - SPOUSAL_ROTH_IRA
        - TESTAMENTARY_TRUST
        - THRIFT_SAVINGS_PLAN
        - INHERITED_ANNUITY
        - CORPORATE_ACCOUNT
        - LIMITED_LIABILITY_ACCOUNT
        - VEHICLE_INSURANCE
        - DISABILITY
        - HEALTH
        - LONG_TERM_CARE
        - PROPERTY_AND_CASUALTY
        - UNIVERSAL_LIFE
        - TERM_LIFE
        - WHOLE_LIFE
        - ACCIDENTAL_DEATH_AND_DISMEMBERMENT
        - VARIABLE_UNIVERSAL_LIFE
        - ROTH
        - ROLLOVER
        - OTHER
        - ANNUITY
        - TRANSFERRABLE_ON_DEATH
      title: AccountSubtype
      description: The account’s subtype
    AccountBalances:
      properties:
        currency_code:
          title: Currency Code
          examples:
            - USD
          type:
            - string
            - 'null'
        balance:
          title: Balance
          examples:
            - '100.00'
          type:
            - string
            - 'null'
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
        available_balance:
          title: Available Balance
          examples:
            - '50.99'
          type:
            - string
            - 'null'
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
        credit_limit:
          title: Credit Limit
          examples:
            - '200.00'
          type:
            - string
            - 'null'
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
      additionalProperties: true
      type: object
      title: AccountBalances
    Status5:
      type: string
      enum:
        - POSTED
        - PENDING
      title: Status5
    Type7:
      type: string
      enum:
        - DEBIT
        - CREDIT
      title: Type7
    Location:
      properties:
        latitude:
          title: Latitude
          examples:
            - '40.730610'
          type:
            - number
            - 'null'
        longitude:
          title: Longitude
          examples:
            - '-73.935242'
          type:
            - number
            - 'null'
      additionalProperties: true
      type: object
      title: Location
    ReviewReason:
      type: string
      enum:
        - transfer_suspected
        - high_amount
        - no_category
        - new_merchant
        - catalog_seed
      title: ReviewReason
      description: >-
        Why we are asking, ordered by expected damage when the answer is wrong.


        Declaration order is the ranking: a transaction tripping several rules
        keeps the first.

        ``CATALOG_SEED`` is last and is never produced by the damage rules; it
        comes from the

        seeding slot, which only fills space the damage queue left over.
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: PAT
      description: >-
        Bearer authentication with a personal access token (prefix `pat_`).
        Generate tokens in the Truv web app under Settings → API keys.

````

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