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 transactionsList 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.
| Key | Supported operators |
|---|---|
id | eq, in, gt, gte, lt, lte |
externalId | eq, in |
status | eq, in |
createdOn | eq, gt, gte, lt, lte |
startDate | eq, gt, gte, lt, lte |
endDate | eq, gt, gte, lt, lte |
lastUpdatedOn | eq, 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
| Key | Supported operators |
|---|---|
id | eq, in, gt, gte, lt, lte |
externalId | eq, in |
status | eq, in |
createdOn | eq, gt, gte, lt, lte |
lastUpdatedOn | eq, 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.
| Field | Purpose |
|---|---|
pageNumber | Page to return |
pageSize | Records per page |
sortOptions.sortBy | id, createdOn, or lastUpdatedOn |
sortOptions.sortOrder | asc 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
statuseqACTIVE, sortlastUpdatedOndesc, and page as the list grows.
Find schedules ending soon
Surface schedules approaching their end date to renew or extend them.
- Filter
endDatewithlte(your cut-off) andgte(today).
Audit one schedule's runs
Reconcile what a single schedule has generated.
- Call list history for its
id; eachtransaction.statusshows where that occurrence is in the lifecycle.
Best practices
| Practice | Description |
|---|---|
| Track schedules by your own IDs | Filter on externalId so you don't have to store Passport schedule IDs. |
| Page, don't pull | Use pageSize and pageNumber for long result sets. |
| Use history to reconcile | List history to confirm each occurrence ran, rather than inferring from the schedule alone. |
See also
- Recurring transactions: the schedule model and status overview
- Create Recurring Transaction and Manage Recurring Transaction
- Find & list transactions: search all transactions across accounts
- Transaction lifecycle: track an individual generated transaction
Updated about 4 hours ago