Dynamic attorney changes
The dynamic attorney changes node on a bank report (dynamicAttorneyChanges) captures every change the customer recorded against your bank's configurable dynamic attorney settings — bank cards and procuras granted, updated, or revoked in this report.
This is the report-side counterpart of the current-state dynamic attorneys on administrators and bank accounts: the report records what changed, the current state records what applies now once the report is processed.
Module-gated
Every dynamic attorney type is only available when your bank has the DYNAMIC_ATTORNEYS module (see Modules). Without it, projecting dynamicAttorneyChanges returns an authorization error.
One representation per report
Each bank report carries exactly one attorney representation, fixed when the report is created:
hasDynamicAttorneyModule: true— the report was created with the dynamic representation. Its attorney data is indynamicAttorneyChanges, and the legacy per-administratorattorneyChangeslists on administrator changes are empty.hasDynamicAttorneyModule: false— the report carries the legacy representation.dynamicAttorneyChangesisnull, and the attorney data is inadministratorChanges.administratorChange[].attorneyChanges.
Branch on hasDynamicAttorneyModule when your bank is transitioning between the representations — older reports keep the representation they were created with.
Shape
dynamicAttorneyChanges is a single object (not a list) with:
cardChanges— bank card attorney changes, one per affected administrator and bank account.procuraChanges— procura attorney changes, one per affected administrator.aggregatedProcuraChanges— per administrator: the aggregated procura document covering all of their procura changes, as unsignedfileand signedsignedFileblobs.
cardChanges and procuraChanges are interfaces with two concrete implementations each, distinguishing whether the change belongs to an administrator that already existed (DynamicAttorneyAdministratorCardChange / DynamicAttorneyAdministratorProcuraChange) or to one invited in this report (DynamicAttorneyInvitationCardChange / DynamicAttorneyInvitationProcuraChange). Use __typename when you need to tell them apart.
Every change — and every aggregated procura — carries an administratorChange field resolving the person it belongs to. It returns the same AdministratorChange entry (same id, same shape) that administrator changes serves on administratorChanges.administratorChange, so no id juggling is needed to connect an attorney change to a person.
The connection also works the other way: each administratorChanges.administratorChange entry carries dynamicAttorneyCardChanges, dynamicAttorneyProcuraChanges, and dynamicAttorneyAggregatedProcuraChange — the report's dynamic attorney changes narrowed to that administrator. Start from dynamicAttorneyChanges when you want the whole report's change set, or from administratorChanges when you walk administrator by administrator.
Change types
Every card and procura change carries a changeType:
NEW— the attorney is granted in this bank report.UPDATED— an existing attorney is changed in this bank report.REMOVED— an existing attorney is revoked in this bank report.UNCHANGED— an existing attorney is kept as it is.BANK_SETTINGS_UNAVAILABLE— the bank setting the attorney was granted from is no longer available, so the attorney could not be carried over.
Settings references
Each change resolves the bank setting it was recorded against: bankAttorneySettingsCard on card changes and bankAttorneySettingsProcura on procura changes. These are your bank's own dynamic attorney card and procura settings, exposing title, organizationFriendlyDescription, legalDescription, and active / archived status flags. A setting that has since been deactivated or archived still resolves, so historical reports keep their context.
Procura changes follow the same account-scoping rule as current-state procuras: a bankAccount of null means the procura covers every bank account of the organization; otherwise the change is bound to that one specific bankAccount.
Where to query
See Querying dynamic attorney changes. There is no dedicated rejection flag for dynamic attorney changes — if the attorney setup is unacceptable, reject the package via rejectBoardMemberAttorneys: true on rejectBankPackageById.