Find & list transactions

Search every transaction by criteria: filter, sort, and page through matching transactions instead of retrieving them one ID at a time.

When you need more than a single transaction, retrieve every transaction that matches a set of criteria with the List Transactions API. It's a filtered, paginated search: you pass filter conditions (which accounts, which dates, which method or status) and PCE returns the matching transactions, newest-first.

Use it to build a transaction history, reconcile a date range, or find every transaction tied to an account, a payee, or your own externalId, without polling each transaction by ID.

List transactions vs. account ledger

List Transactions returns the transactions you scheduled (a payout, a collection, a transfer) with their status and lifecycle. The Account ledger returns the posted debits and credits with the running balance. Reach for the ledger when you're reconciling balances; reach for List Transactions when you're tracking the money movements themselves.


List transactions

Make POST request to /v1/transaction/list. Like other Treasury calls, it requires the PromiseMode header (NEVER for an immediate response, ALWAYS to defer processing).

Request

POST /v1/transaction/list
PromiseMode: NEVER

{
  "pageNumber": 1,
  "pageSize": 25,
  "getTotalCount": true,
  "sortOptions": {
    "sortBy": "lastUpdatedOn",
    "sortOrder": "DESC"
  },
  "criteria": {
    "filters": [
      { "operator": "eq",  "key": "source.account.id", "values": [4000693] },
      { "operator": "gte", "key": "createdOn",         "values": ["07/15/2024 00:00:00"] }
    ]
  }
}

Response

{
  "totalCount": 1,
  "returnedCount": 1,
  "pageNumber": 1,
  "offset": 230001518,
  "hasMore": false,
  "resources": [
    {
      "resourceName": "transaction",
      "url": "/v1/transaction/id/230001518",
      "id": 230001518,
      "amount": "5.00",
      "type": "REGULAR",
      "method": "WIRE",
      "purpose": "payment",
      "transactionClass": "SEND",
      "source": {
        "account": {
          "resourceName": "account",
          "url": "/v1/customer/id/4000854/account/id/4000693",
          "id": 4000693
        }
      },
      "destination": {
        "externalAccount": {
          "id": 4021251,
          "accountNumberLast4": "2309",
          "routingNumber": "011000015",
          "holderName": "Lola",
          "holderType": "CORPORATE",
          "status": "ACTIVE"
        }
      },
      "scheduleDate": "07/16/2024",
      "status": "SCHEDULED",
      "statusReason": "On User Request",
      "statusDate": "07/16/2024 07:01:28",
      "createdOn": "07/16/2024 07:01:28",
      "lastUpdatedOn": "07/16/2024 07:01:28"
    }
  ]
}

Filters

Pass one or more filter conditions in criteria.filters[]. Each condition is a key, an operator, and one or more values. criteria is required.

KeyFilter by
idThe Passport transaction ID
externalIdYour external identifier for the transaction
source.account.idSource Passport account
source.externalAccount.idSource external (linked bank) account
source.card.idSource card
destination.account.idDestination Passport account
destination.externalAccount.idDestination external (linked bank) account
destination.address.idDestination mailing address (for checks)
scheduleDateDate the transaction is scheduled to process
typeTransaction type (e.g., REGULAR, REVERSAL)
methodRail: ACH, WIRE, CARD, CHECK, BOOK
amountTransaction amount
statusLifecycle status: SCHEDULED, PENDING, PROCESSING, COMPLETED, FAILED, CANCELLED
authCodeAuthorization code
createdOn / lastUpdatedOnTimestamps (use gte + lte for a range)
createdBy / lastUpdatedByActor that created or last updated the transaction

Supported operators: eq, ne, gt, gte, lt, lte, in, nin, like.

Filter by externalId when you track transactions by your own identifiers; you don't need to store Passport transaction IDs to find them again.


Pagination & sorting

A criteria match can span many transactions; page through the result set rather than pulling everything at once.

FieldPurpose
pageNumberPage to return
pageSizeRecords per page (default 100)
limitTotal records to return (1-100, default 100)
offsetID of the last record returned; pass it to fetch the next page (requires sorting by id)
getTotalCountSet true to include totalCount in the response
sortOptions.sortBySort field: id, createdOn, or lastUpdatedOn
sortOptions.sortOrderASC or DESC

The response echoes totalCount, returnedCount, pageNumber, offset (the ID of the last record returned), and hasMore so you can request the next page.


Scenarios

List transactions for an account

Read every transaction that moved money from one account, newest-first, the backbone of an activity view.

  • Filter on source.account.id (or destination.account.id) with eq.
  • Sort lastUpdatedOn DESC, set a modest pageSize, and page as the customer scrolls.

Reconcile a date range

Pull everything created in a window to reconcile against your own records.

  • Combine createdOn gte (start) and createdOn lte (end).
  • Add getTotalCount: true so you know how many transactions to expect across pages.

Find failed or pending transactions

Surface transactions that need attention.

  • Filter status in ["PENDING", "FAILED"].
  • Add a method filter (for example eq ACH) to narrow to one rail.

Find ACH reversals

Locate reversals generated against your ACH transactions.

  • Filter type in ["REVERSAL"]. Each reversal's processingDetail.parent links back to the original transaction.

Best practices

PracticeWhy
Track by your own IDsFilter on externalId so you don't have to store Passport transaction IDs.
Page, don't pullUse pageSize and offset for long result sets instead of requesting everything at once.
Prefer webhooks for live statusFor a single transaction's status changes, subscribe to transaction events; use List Transactions for history and bulk queries, not polling.
Narrow with combined filtersStack filters (account + date + status) to keep result sets small and responses fast.

See also



Did this page help you?
.readme-logo { display: none !important; }