RecurrenceGroup
A V2 recurring group. Most fields are derived on read from the group's assigned transactions
(latest-anchored); only frequency and the user overrides live on the group itself.
Resolver parent is a RecurrenceGroupItem (group + derived fields).
type RecurrenceGroup {
account: Account
amount: Float
category: Category
endedAt: DateTime
frequency: String!
id: ID!
isActive: Boolean!
isApproximate: Boolean!
isNew: Boolean!
logoUrl: String
merchant: Merchant
name: String
nextForecastedTransaction: RecurringTransactionNextForecastedTransaction
periodDate: Date
periodStatus: RecurrenceGroupStatus
recurringType: RecurringType
statement: String
status: RecurrenceGroupStatus!
transactions: [Transaction!]!
}
Fields
RecurrenceGroup.account ● Account object
Account of the most recent assigned transaction.
RecurrenceGroup.amount ● Float scalar
Representative amount, derived from the most recent assigned transaction (signed).
RecurrenceGroup.category ● Category object
Category of the most recent assigned transaction.
RecurrenceGroup.endedAt ● DateTime scalar
When the user marked the group ended; null while active. Always user-initiated.
RecurrenceGroup.frequency ● String! non-null scalar
The recurrence cadence (e.g. monthly, weekly). Stored on the group.
RecurrenceGroup.id ● ID! non-null scalar
RecurrenceGroup.isActive ● Boolean! non-null scalar
False once the user has ended the group (ended_at set).
RecurrenceGroup.isApproximate ● Boolean! non-null scalar
True when the assigned transactions' amounts vary (a variable-amount stream); False for a fixed amount.
RecurrenceGroup.isNew ● Boolean! non-null scalar
Whether to show the 'New' row indicator. Clears for the whole household once a single member has seen it twice — report impressions with recordRecurrenceGroupNewBadgeImpressions. Always false on an ended group, so it never competes with that row's inactive treatment.
RecurrenceGroup.logoUrl ● String scalar
User-set logo; falls back to the merchant's logo when unset.
RecurrenceGroup.merchant ● Merchant object
The group's merchant. May be null (leaves room for liability-backed groups, deferred).
RecurrenceGroup.name ● String scalar
User-set custom name for the group; falls back to the merchant's name when unset.
RecurrenceGroup.nextForecastedTransaction ● RecurringTransactionNextForecastedTransaction object
Next expected charge (date + amount), projected from the cadence and the latest transaction.
RecurrenceGroup.periodDate ● Date scalar
The single date to show for the group within the requested window: the actual charge date when PAID, the most recent past-due expected date when OVERDUE, otherwise the next expected date (which falls outside the window for a group not due that period). Null when no window is given.
RecurrenceGroup.periodStatus ● RecurrenceGroupStatus enum
Month-scoped status (paid / upcoming / overdue / ended) for the window passed to recurrenceGroups(startDate, endDate) — the Monthly/Calendar views. Null when no window is given (All view); use status then. Does not surface possibly_inactive (a today-relative nudge).
RecurrenceGroup.recurringType ● RecurringType enum
income / expense / transfer. The user's stored override if set, otherwise derived from the latest transaction's amount sign and category.
RecurrenceGroup.statement ● String scalar
Raw 'as on statement' descriptor from the latest transaction.
RecurrenceGroup.status ● RecurrenceGroupStatus! non-null enum
Derived current-cycle status (paid / upcoming / overdue / possibly_inactive / ended), from the latest transaction vs. the cadence. possibly_inactive is a nudge only — we never end a group automatically.
RecurrenceGroup.transactions ● [Transaction!]! non-null object
Assigned transactions, newest first.
Returned By
recurrenceGroup query ● recurrenceGroups query