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

# List transactions

> Lists transactions with their resolved vendor names and accounting references.

Spam transactions are excluded unless you set `include_spam=true`. An ID filter cannot be combined with `has_posted_journal_entry`, `status=posted` or `status=pending`.


## OpenAPI

````yaml openapi-public-preview.json GET /v1/transactions
openapi: 3.1.0
info:
  title: Entendre API
  version: 1.0.0
  description: Programmatic access to crypto-native accounting and treasury operations.
servers:
  - url: https://api.entendre.finance
    description: Production API.
security:
  - ApiKey: []
tags:
  - name: Organization
    description: Read your organization profile and find members for agent assignments.
  - name: Transactions
    description: Find transactions, inspect their details and create manual records.
  - name: Sources
    description: >-
      Manage wallets, exchange accounts, bank accounts and other transaction
      sources.
  - name: Assets
    description: Inspect asset acquisitions, remaining quantities and cost basis.
  - name: Journals
    description: >-
      Create and post journal entries, correct eligible entries and sync posted
      journals to a connected general ledger.
  - name: Documents
    description: >-
      Upload documents, check processing status and link supporting evidence to
      transactions.
  - name: Legal Entities
    description: Manage the legal entities used in your accounting records.
  - name: Ledger Accounts
    description: Manage your chart of accounts and find accounts for journal entries.
  - name: Tags
    description: Create and manage tags to classify your records.
  - name: Accruals
    description: >-
      Create and post accruals, inspect their status and reverse eligible
      entries.
  - name: Cash Application
    description: Match deposits to invoices and manage the resulting cash applications.
  - name: Classification
    description: >-
      Classify transactions in a batch, post eligible entries and inspect the
      results.
  - name: Revaluation
    description: Run asset revaluations for an accounting period and check their results.
  - name: Accounting Periods
    description: Check whether a period is ready to close, then close or reopen it.
  - name: Income Statement
    description: View revenue, expenses and net income for a reporting period.
  - name: Balance Sheet
    description: View assets, liabilities and equity as of a reporting date.
  - name: Trial Balance
    description: Review ledger account balances and debit and credit totals.
  - name: Closing Positions
    description: View asset positions at the end of a reporting period.
  - name: Treasury Balances
    description: Review treasury balances by asset and source.
  - name: Realized Gains & Losses
    description: Review realized gains and losses from asset dispositions.
  - name: Asset Tax Lots
    description: Inspect asset tax lots, remaining quantities and cost basis.
  - name: Schedule of Dispositions
    description: >-
      Review asset dispositions and their proceeds, cost basis and gains or
      losses.
  - name: Financial Insights
    description: Review financial insights for your selected reporting context.
  - name: Agents
    description: Create agents, schedule their work and inspect their runs.
  - name: Memory
    description: Read, search and maintain the memory files your agents use.
  - name: Connections
    description: Connect providers, manage authorization and disconnect.
  - name: GL Mapping
    description: >-
      Map ledger accounts and legal entities to your ERP. Import legal entities,
      tags and chart of accounts.
  - name: Request
    description: Request information, documents or connections from a client.
  - name: Client
    description: Manage your firm’s client relationships.
  - name: Team
    description: Invite team members and manage their access to your firm.
  - name: Settings
    description: Read and update your firm settings.
paths:
  /v1/transactions:
    get:
      tags:
        - Transactions
      summary: List transactions
      description: >-
        Lists transactions with resolved vendor names and accounting references.
        Pass one ID in `transaction_ids` to retrieve one record. Returns a
        paginated array, including when filtering by ID. No matches returns HTTP
        200 with an empty `data` array.


        Set `include_spam=true` to include spam. ID lookups cannot be combined
        with `has_posted_journal_entry` or `status=posted/pending`.
      operationId: list_transactions
      parameters:
        - name: source_class
          in: query
          schema:
            type: string
            enum:
              - crypto
              - fiat
              - exchange
              - card
              - other
          description: Filter by source class.
        - name: status
          in: query
          schema:
            type: string
            enum:
              - pending
              - posted
              - spam
          description: Filter by transaction status.
        - name: has_posted_journal_entry
          in: query
          schema:
            type: boolean
          description: Filter by whether the transaction has a posted journal entry.
        - name: include_spam
          in: query
          schema:
            type: boolean
          description: >-
            Set to `true` to include spam transactions. Use `status=spam` for
            spam only.
        - name: min_value
          in: query
          schema:
            type: string
            pattern: ^[0-9]+(?:\.[0-9]+)?$
            example: '100.00'
          description: >-
            Minimum gross fiat value in the selected currency. No currency
            conversion is applied.
        - name: max_value
          in: query
          schema:
            type: string
            pattern: ^[0-9]+(?:\.[0-9]+)?$
            example: '100.00'
          description: >-
            Maximum gross fiat value in the selected currency. No currency
            conversion is applied.
        - name: min_quantity
          in: query
          schema:
            type: string
            pattern: ^[0-9]+(?:\.[0-9]+)?$
            example: '0.5'
          description: >-
            Minimum gross asset quantity. For fiat transactions, this is the
            fiat amount.
        - name: max_quantity
          in: query
          schema:
            type: string
            pattern: ^[0-9]+(?:\.[0-9]+)?$
            example: '0.5'
          description: >-
            Maximum gross asset quantity. For fiat transactions, this is the
            fiat amount.
        - name: sort_by
          in: query
          schema:
            type: string
            enum:
              - transaction_date
              - created_at
              - updated_at
              - gross_amount
              - net_amount
              - gross_price
              - asset_type
              - chain
            default: transaction_date
          description: Field to sort results by.
        - name: sort_direction
          in: query
          schema:
            type: string
            enum:
              - asc
              - desc
            default: desc
          description: Sort order. Defaults to descending (newest first).
        - name: legal_entity_ids
          in: query
          required: false
          schema:
            type: array
            items:
              type: string
          style: form
          explode: true
          description: >-
            Filter by one or more legal entity IDs. Omit to include all
            authorized entities. An empty list is invalid.
        - name: transaction_ids
          in: query
          required: false
          schema:
            type: array
            items:
              type: string
          style: form
          explode: true
          description: >-
            IDs to return, separated by commas. The other filters also apply. Do
            not combine with `has_posted_journal_entry`, `status=posted` or
            `status=pending`.
        - name: exclude_transaction_ids
          in: query
          required: false
          schema:
            type: array
            items:
              type: string
          style: form
          explode: true
          description: >-
            Exclude these transaction IDs. Can be combined with
            has_posted_journal_entry=false.
        - name: transaction_sequence_numbers
          in: query
          required: false
          schema:
            type: array
            items:
              type: string
              pattern: ^OT-\d+$
              maxLength: 64
            maxItems: 100
          style: form
          explode: true
          description: >-
            Any of these transaction sequence numbers, such as OT-123. Do not
            combine with has_posted_journal_entry=false.
        - name: financial_account_ids
          in: query
          required: false
          schema:
            type: array
            items:
              type: string
          style: form
          explode: true
          description: >-
            Filter by IDs returned in account_id. Matches a source or its
            associated wallet, including linked Solana staking accounts.
        - name: transaction_types
          in: query
          required: false
          schema:
            type: array
            items:
              type: string
              enum:
                - DEPOSIT
                - WITHDRAWAL
                - SWAP
                - NON_TAXABLE_CONVERSION
                - BRIDGE
                - INTERCOMPANY TRANSFER
                - INTERNAL TRANSFER
                - FEE
                - MINTING
                - STAKING_REWARD
                - VALIDATOR_REWARD
                - INVOICE
                - BILL
                - CLAIM REWARD
                - BORROW
                - REPAYMENT
                - RESERVES CHANGE
                - REALIZED_PNL
                - INCOME
                - EXPENSE
                - REFUND
                - CHARGEBACK
                - NFT
                - SPAM
                - UNKNOWN
          style: form
          explode: true
          description: >-
            Any of these economic transaction types. These are separate from
            accounting classifications.
        - name: source_types
          in: query
          required: false
          schema:
            type: array
            items:
              type: string
          style: form
          explode: true
          description: >-
            Filter by one or more source types. Repeat the parameter or send a
            comma-separated list.
        - name: asset_types
          in: query
          required: false
          schema:
            type: array
            items:
              type: string
          style: form
          explode: true
          description: >-
            Filter by one or more asset types. Repeat the parameter or send a
            comma-separated list.
        - name: chains
          in: query
          required: false
          schema:
            type: array
            items:
              type: string
          style: form
          explode: true
          description: >-
            Filter by one or more chains. Repeat the parameter or send a
            comma-separated list.
        - name: addresses
          in: query
          required: false
          schema:
            type: array
            items:
              type: string
            maxItems: 100
          style: form
          explode: true
          description: >-
            On-chain addresses, up to 100. Matches the from or to address,
            without case sensitivity. A transaction matches when it touches an
            address or belongs to a source in `financial_account_ids` or
            `source_id`. Repeat the parameter or send a comma-separated list.
        - name: provider_category
          in: query
          required: false
          schema:
            type: array
            items:
              type: string
          style: form
          explode: true
          description: >-
            Raw category from Ramp or Plaid, matched as a substring without case
            sensitivity. Values in the array match any; labels joined with `;`
            in one value must all match.
        - name: include_count
          in: query
          required: false
          schema:
            type: boolean
          description: >-
            Include the total number of matching records. If the count cannot be
            calculated, the request fails.
        - name: count_only
          in: query
          required: false
          schema:
            type: boolean
          description: >-
            Return total_count with an empty data array and no next page. Takes
            precedence over include_count.
        - name: limit
          in: query
          required: false
          description: Maximum number of records to return.
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 25
        - name: cursor
          in: query
          required: false
          description: >-
            The `next_cursor` value from the previous page. Keep the other
            filters unchanged.
          schema:
            type: string
        - name: search
          in: query
          required: false
          description: Case-insensitive search in labels and descriptions.
          schema:
            type: string
        - name: source_id
          in: query
          required: false
          description: Source ID (`src_…`).
          schema:
            type: string
            example: src_507f1f77bcf86cd799439011
        - name: direction
          in: query
          required: false
          description: Direction of the movement relative to the source.
          schema:
            type: string
            enum:
              - debit
              - credit
        - name: start_date
          in: query
          required: false
          description: Inclusive event timestamp lower bound.
          schema:
            type: string
            format: date-time
            example: '2026-08-31T12:00:00Z'
        - name: end_date
          in: query
          required: false
          description: Inclusive upper bound for the event timestamp.
          schema:
            type: string
            format: date-time
            example: '2026-08-31T12:00:00Z'
        - name: updated_since
          in: query
          required: false
          description: >-
            Inclusive lower bound for the last update time. When you sync
            changes, deduplicate by `id` and `updated_at`.
          schema:
            type: string
            format: date-time
            example: '2026-08-31T12:00:00Z'
      responses:
        '200':
          description: The matching records.
          headers:
            X-Request-Id:
              description: Support correlation ID.
              schema:
                type: string
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Transaction'
                    description: The records.
                  has_more:
                    type: boolean
                    description: Whether another page is available.
                  next_cursor:
                    type:
                      - string
                      - 'null'
                    description: Cursor for the next page, or `null` on the last page.
                  total_count:
                    type: integer
                    minimum: 0
                    description: >-
                      Total matching records across all pages. Present when
                      include_count=true or count_only=true.
                required:
                  - data
                  - has_more
                  - next_cursor
                additionalProperties: false
              example:
                data:
                  - id: txn_507f1f77bcf86cd799439011
                    account_id: null
                    organization_id: org_507f1f77bcf86cd799439011
                    legal_entity_id: le_507f1f77bcf86cd799439011
                    source_class: fiat
                    provider: plaid
                    vendor: null
                    provider_category: null
                    external:
                      timestamp: '2026-08-31T12:00:00Z'
                      description: Customer deposit
                      direction: credit
                      quantity: null
                      currency: USD
                      value_fiat:
                        gross: '100.00'
                        fee: '0.00'
                        net: '100.00'
                        currency: USD
                    crypto: null
                    bank:
                      bank_name: Example Bank
                      account_last4: '4242'
                      counterparty_name: Example Customer
                    card: null
                    internal:
                      transaction_type: DEPOSIT
                      status: pending
                      memo: null
                      journal_entry_id: null
                    created_at: null
                    updated_at: null
                    tag_ids:
                      - tag_507f1f77bcf86cd799439011
                has_more: false
                next_cursor: null
        '400':
          description: >-
            The request is invalid. `error.fields` lists the fields to correct.
            Nothing was changed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: VALIDATION_ERROR
                  message: Invalid path, query or request body.
                  request_id: req_example
        '401':
          description: The API key is missing, invalid or expired.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: UNAUTHORIZED
                  message: Authentication is required.
                  request_id: req_example
        '403':
          description: >-
            The API key does not have the required scope or is not associated
            with a user, or the action needs a review in the dashboard.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: FORBIDDEN
                  message: Insufficient access to organization
                  request_id: req_example
        '404':
          description: The resource does not exist, or your organization cannot access it.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: RESOURCE_NOT_FOUND
                  message: Resource not found
                  request_id: req_example
        '429':
          description: >-
            Too many requests. If the response has a `Retry-After` header, wait
            that many seconds before you retry. Otherwise, read `error.message`.
          headers:
            Retry-After:
              description: Seconds to wait before retrying.
              schema:
                type: integer
                minimum: 1
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: RATE_LIMITED
                  message: Rate limit exceeded. Retry after 30s.
                  request_id: req_example
        '500':
          description: >-
            An unexpected error occurred. A write can still have taken effect;
            check the resource before you retry. Give the `request_id` to
            support.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: INTERNAL_ERROR
                  message: Internal server error
                  request_id: req_example
        '503':
          description: >-
            A service that this operation needs is unavailable. If the response
            has a `Retry-After` header, wait that many seconds. Check for
            earlier accepted work before you send the request again.
          headers:
            Retry-After:
              description: Seconds to wait before retrying.
              schema:
                type: integer
                minimum: 1
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: SERVICE_UNAVAILABLE
                  message: Service unavailable.
                  request_id: req_example
components:
  schemas:
    Transaction:
      type: object
      required:
        - id
        - account_id
        - organization_id
        - legal_entity_id
        - source_class
        - external
        - internal
      properties:
        id:
          type: string
          examples:
            - txn_abc123
          description: Transaction ID (`txn_…`).
        sequence_number:
          type:
            - string
            - 'null'
          description: >-
            Sequence number, such as `OT-1234`. It is assigned shortly after
            creation, so it is `null` in the create response.
        account_id:
          type:
            - string
            - 'null'
          description: >-
            ID of the source of the transaction. Use it in the `account_id`
            filter of List transactions.
        organization_id:
          type: string
          description: Organization ID (`org_…`).
        legal_entity_id:
          type: string
          description: Legal entity ID (`le_…`).
        source_class:
          type: string
          enum:
            - crypto
            - fiat
            - card
            - exchange
            - other
          description: 'Kind of source: `crypto`, `fiat`, `card`, `exchange` or `other`.'
        provider:
          type: string
          enum:
            - wallet
            - fireblocks
            - plaid
            - ramp
            - rain
            - kraken
            - binance
            - coinbase
            - coinbase_prime
            - coinbase_exchange
            - coinbase_international
            - deribit
            - bitmex
            - bybit
            - kucoin
            - gate
            - mexc
            - gemini
            - woo
            - okx
            - bitfinex
            - circle
            - canton
            - niural
            - finch_payroll
          description: Provider that the transaction came from.
        vendor:
          type:
            - string
            - 'null'
          description: >-
            Counterparty name, or `null` when unknown. Can be bank text when
            there is no merchant name.
        provider_category:
          type:
            - string
            - 'null'
          description: >-
            Raw category metadata assigned by Ramp or Plaid. It is not
            accounting treatment.
        external:
          type: object
          properties:
            timestamp:
              type: string
              format: date-time
              description: Time of the transaction (ISO 8601).
            description:
              type: string
              description: Description from the provider.
            direction:
              type: string
              enum:
                - credit
                - debit
              description: >-
                `credit` for money in, `debit` for money out, relative to the
                source.
            quantity:
              type:
                - object
                - 'null'
              description: >-
                Token quantity breakdown (crypto only). `null` for fiat/card
                transactions.
              properties:
                gross:
                  type: string
                  description: >-
                    Gross token quantity before fees. For a 1.5 ETH transfer
                    with 0.003 ETH gas, `gross` is `"1.5"`.
                fee:
                  type: string
                  description: >-
                    Token fee deducted (such as gas in native token). Same unit
                    as `currency`.
                net:
                  type: string
                  description: Net token quantity after fees (`gross - fee`).
            currency:
              type: string
              description: Token symbol (crypto) or ISO 4217 (fiat).
            value_fiat:
              $ref: '#/components/schemas/ValueFiat'
          description: The transaction as the provider reported it.
        crypto:
          type:
            - object
            - 'null'
          description: Present when `source_class` is `crypto`. `null` otherwise.
          properties:
            chain:
              type: string
              description: Blockchain network, such as `eth`.
            asset_type:
              type: string
              description: Asset symbol, such as `ETH`.
            from_address:
              type: string
              description: Sending address.
            to_address:
              type: string
              description: Receiving address.
            hash:
              type: string
              description: On-chain transaction hash.
        bank:
          type:
            - object
            - 'null'
          description: Bank details for fiat transactions.
          properties:
            bank_name:
              type: string
              description: Bank name.
            account_last4:
              type: string
              description: Last four digits of the bank account.
            counterparty_name:
              type: string
              description: Counterparty name from the bank.
            merchant_id:
              type: string
              description: >-
                Stable merchant ID from Plaid. Use it to group transactions by
                merchant.
            category_version:
              type: string
              description: Version of the Plaid category taxonomy.
            category_confidence:
              type: string
              description: Plaid confidence in the category.
            running_balance:
              type: string
              description: >-
                Account balance after the transaction, when the bank reports it
                (decimal string).
            correction_status:
              type: string
              description: Status of a bank correction to this transaction.
            correction_reason:
              type: string
              description: Reason for the bank correction.
            bank_removed:
              type: boolean
              description: '`true` when the bank removed the transaction.'
            counterparties:
              type: array
              items:
                type: object
                properties:
                  name:
                    type: string
                    nullable: true
                    description: Counterparty name.
                  entity_id:
                    type: string
                    nullable: true
                    description: Plaid entity ID of the counterparty.
                  type:
                    type: string
                    nullable: true
                    description: >-
                      Counterparty type, such as merchant or payment
                      intermediary.
                  confidence:
                    type: string
                    nullable: true
                    description: Plaid confidence in the counterparty.
              description: Counterparties that Plaid identified.
        card:
          type:
            - object
            - 'null'
          description: Present when `source_class` is `card`. `null` otherwise.
          properties:
            merchant_name:
              type: string
              description: Merchant name.
            merchant_category:
              type: string
              description: Merchant category.
            card_last4:
              type: string
              description: Last four digits of the card.
            employee_name:
              type: string
              description: Cardholder name.
        internal:
          type: object
          properties:
            transaction_type:
              allOf:
                - $ref: '#/components/schemas/TransactionCategory'
              description: >-
                Economic transaction type. The linked journal shows the
                accounting treatment.
            status:
              type: string
              enum:
                - pending
                - posted
                - spam
              description: '`pending`, `posted` or `spam`.'
            memo:
              type:
                - string
                - 'null'
              description: Memo.
            journal_entry_id:
              type:
                - string
                - 'null'
              description: >-
                Prefixed ID of the associated journal entry (such as
                `je_abc123`). `null` if no journal entry has been posted.
          description: How Entendre records the transaction.
        created_at:
          type:
            - string
            - 'null'
          format: date-time
          description: Time the transaction was imported (ISO 8601).
        updated_at:
          type:
            - string
            - 'null'
          format: date-time
          description: ISO 8601 timestamp of the last update.
        tag_ids:
          type: array
          items:
            type: string
            description: Tag ID (`tag_…`).
            example: tag_507f1f77bcf86cd799439011
          maxItems: 100
          uniqueItems: true
          description: Tag IDs (`tag_…`).
    ErrorResponse:
      type: object
      required:
        - error
      properties:
        error:
          type: object
          required:
            - code
            - message
            - request_id
          properties:
            code:
              type: string
              description: Machine-readable error code.
            message:
              type: string
              description: Technical description for developers.
            fields:
              type: object
              additionalProperties:
                type: string
              description: >-
                Present only on VALIDATION_ERROR. Maps failing field paths to
                reason strings.
            details:
              type: object
              additionalProperties: true
              description: >-
                Optional redacted diagnostic details. Request validation uses
                fields or field_errors.
            suggested_action:
              type: string
              description: A suggested next step.
            documentation_url:
              type: string
              format: uri
              description: Link to documentation about this error.
            request_id:
              type: string
              description: Unique request ID for support escalation.
          description: Error details.
    ValueFiat:
      type: object
      description: >-
        Fiat values as decimal strings: `gross` is quantity × unit price, `fee`
        is token fee × unit price, and `net` is gross − fee.
      required:
        - gross
        - net
        - currency
      properties:
        gross:
          type: string
          description: >-
            Total fiat value before fees (`quantity × unit price`). Used as the
            line amount for journal entries.
        fee:
          type: string
          description: >-
            Fee in fiat terms (`token fee × unit price`). `"0.00"` if no fee.
            When non-zero, the fee is typically posted as a separate
            FEE-classified transaction.
        net:
          type: string
          description: Fiat value after fees (`gross − fee`).
        currency:
          type: string
          description: ISO 4217 currency code (such as `USD`, `EUR`).
    TransactionCategory:
      type: string
      description: >-
        Economic transaction type. Some values contain spaces, such as `INTERNAL
        TRANSFER`.
      enum:
        - DEPOSIT
        - WITHDRAWAL
        - SWAP
        - NON_TAXABLE_CONVERSION
        - BRIDGE
        - INTERCOMPANY TRANSFER
        - INTERNAL TRANSFER
        - FEE
        - MINTING
        - STAKING_REWARD
        - VALIDATOR_REWARD
        - INVOICE
        - BILL
        - CLAIM REWARD
        - BORROW
        - REPAYMENT
        - RESERVES CHANGE
        - REALIZED_PNL
        - INCOME
        - EXPENSE
        - REFUND
        - CHARGEBACK
        - NFT
        - SPAM
        - UNKNOWN
  securitySchemes:
    ApiKey:
      type: apiKey
      in: header
      name: X-API-Key
      description: >-
        Your organization API key. Some operations also need a key that is
        associated with a user; their pages say so.

````