Find & track recurring transactions

List recurring schedules by criteria, and list the transactions a schedule has generated.

Two searches cover recurring transactions: list schedules to find recurring instructions that match a set of criteria, and list history to see the individual transactions a single schedule has generated. Both are filtered, paginated POST searches. Use them to build a management view of your schedules and to audit what each one has run.

To retrieve a single schedule by id, GET /v1/transaction/recurring/id/{id} instead (see Create Recurring Transaction).

List schedules vs. list history vs. list transactions

List schedules returns recurring instructions (the schedules). List history returns the transactions one schedule generated. To search all transactions (recurring or one-off) across accounts, use Find & list transactions instead.


List schedules

Retrieve every recurring schedule that matches your criteria. Make a POST to /v1/transaction/recurring/list.

Request

POST /v1/transaction/recurring/list

{
  "pageNumber": 1,
  "pageSize": 25,
  "sortOptions": {
    "sortBy": "lastUpdatedOn",
    "sortOrder": "desc"
  },
  "criteria": {
    "filters": [
      { "operator": "eq", "key": "status", "values": ["ACTIVE"] }
    ]
  }
}

Response

{
  "totalCount": 12276,
  "returnedCount": 2,
  "pageNumber": 1,
  "hasMore": "true",
  "resources": [
    {
      "resourceName": "recurringTransaction",
      "url": "/v1/transaction/recurring/id/21021",
      "id": 21021,
      "externalId": "recurring-month-001",
      "name": "Recurring payment of fixed amount to subcontractor",
      "status": "ACTIVE",
      "statusReason": "ON_USER_REQUEST",
      "statusDate": "03/13/2023",
      "action": [
        {
          "type": "TRANSACTION",
          "transaction": { "amount": "100.00", "method": "ACH" }
        }
      ],
      "transactionDetail": {
        "startDate": "03/13/2023",
        "frequency": "MONTH",
        "interval": 1,
        "dayOfMonth": ["1"]
      },
      "createdOn": "03/13/2023 12:10:38",
      "lastUpdatedOn": "03/13/2023 12:10:38"
    }
  ]
}

Filters

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

KeySupported operators
ideq, in, gt, gte, lt, lte
externalIdeq, in
statuseq, in
createdOneq, gt, gte, lt, lte
startDateeq, gt, gte, lt, lte
endDateeq, gt, gte, lt, lte
lastUpdatedOneq, gt, gte, lt, lte

Sort by id, createdOn, or lastUpdatedOn.


List a schedule's history

Retrieve the transactions generated under one schedule. Make a POST to /v1/transaction/recurring/id/{id}/history.

Request

POST /v1/transaction/recurring/id/12242/history

{
  "pageNumber": 1,
  "pageSize": 25,
  "sortOptions": {
    "sortBy": "lastUpdatedOn",
    "sortOrder": "desc"
  },
  "criteria": {
    "filters": []
  }
}

Response

{
  "totalCount": 2,
  "returnedCount": 2,
  "pageNumber": 1,
  "hasMore": "false",
  "resources": [
    {
      "createdOn": "03/13/2023 05:05:47",
      "lastUpdatedOn": "03/13/2023 05:05:47",
      "createdBy": { "username": "SYSTEM", "status": "ACTIVE", "userType": "SYSTEM" },
      "recurringTransactionId": 12242,
      "transaction": {
        "id": 230018301,
        "amount": "2.22",
        "type": "REGULAR",
        "status": "SCHEDULED",
        "statusReason": "ON_USER_REQUEST"
      }
    },
    {
      "createdOn": "03/06/2023 07:52:59",
      "lastUpdatedOn": "03/06/2023 07:52:59",
      "createdBy": { "username": "SYSTEM", "status": "ACTIVE", "userType": "SYSTEM" },
      "recurringTransactionId": 12242,
      "transaction": {
        "id": 230015382,
        "amount": "2.22",
        "type": "REGULAR",
        "processDate": "03/10/2023 07:58:49",
        "status": "PROCESSING",
        "statusReason": "PROCESSING_IN_TRANSIT"
      }
    }
  ]
}

Each entry links a generated transaction (with its own id and lifecycle status) to the recurringTransactionId that produced it. Take the transaction id to track it via the Transaction lifecycle.

Filters

KeySupported operators
ideq, in, gt, gte, lt, lte
externalIdeq, in
statuseq, in
createdOneq, gt, gte, lt, lte
lastUpdatedOneq, gt, gte, lt, lte

Sort by id, createdOn, or lastUpdatedOn.


Pagination & sorting

Both searches share the same paging shape. A criteria match can span many records; page through the result set rather than pulling everything at once.

FieldPurpose
pageNumberPage to return
pageSizeRecords per page
sortOptions.sortByid, createdOn, or lastUpdatedOn
sortOptions.sortOrderasc or desc

The response echoes totalCount, returnedCount, pageNumber, and hasMore so you can request the next page.


Scenarios

Show all active schedules

Build a management view of running schedules.

  • Filter status eq ACTIVE, sort lastUpdatedOn desc, and page as the list grows.

Find schedules ending soon

Surface schedules approaching their end date to renew or extend them.

  • Filter endDate with lte (your cut-off) and gte (today).

Audit one schedule's runs

Reconcile what a single schedule has generated.

  • Call list history for its id; each transaction.status shows where that occurrence is in the lifecycle.

Best practices

PracticeDescription
Track schedules by your own IDsFilter on externalId so you don't have to store Passport schedule IDs.
Page, don't pullUse pageSize and pageNumber for long result sets.
Use history to reconcileList history to confirm each occurrence ran, rather than inferring from the schedule alone.

See also



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