Happy start of summer from the ModernFi team! See below for our latest API changes.
This release adds account status filtering, OAuth-authenticated PDF statement downloads, and a refinement to account updates. We recommend reviewing this page closely before beginning development or upgrading to a new API version.
GET /digital-banking/v1/accounts (List Accounts)
statuses query parameter (AccountStatus array, optional, repeatable) — filter accounts by status, e.g. ?statuses=OPEN&statuses=SCHEDULED_FOR_CLOSURE. If omitted, accounts of all statuses are returned.GET /digital-banking/v1/files/{file_id} (Get File)
response_type query parameter (FileResponseType, optional, default presigned_url). The default returns a JSON pre-signed download URL exactly as before. Pass response_type=file to stream the file back directly as raw bytes, with the Content-Type derived from the file (e.g. application/pdf or text/csv) — useful for environments that cannot fetch AWS pre-signed URLs. This powers OAuth-authenticated PDF statement downloads without a separate pre-signed-URL round trip.PATCH /digital-banking/v1/accounts/{account_id} (Update Account)
account_type — account type can no longer be changed after creation.AccountStatus — OPEN, SCHEDULED_FOR_CLOSURE, CLOSEDFileResponseType — presigned_url, fileSee below for our latest API changes. This release focuses on accounts and depositors: secure, on-demand TIN retrieval endpoints, a new List Depositors endpoint, a batch of new account and depositor fields, and a richer close-account response. We recommend reviewing this page closely before beginning development or upgrading to a new API version.
TIN Retrieval — Dedicated endpoints to fetch full tax identification numbers on demand, so full TINs no longer need to be returned in standard account and depositor responses (those now expose only the last four digits).
GET /digital-banking/v1/depositors/{depositor_id}/tin — Retrieve a depositor’s full TIN.GET /digital-banking/v1/accounts/{account_id}/signer-primary-tin — Retrieve the primary signer’s full TIN for an account.GET /digital-banking/v1/accounts/{account_id}/beneficiary-tin — Retrieve the beneficiary’s full TIN for an account.Depositors
GET /digital-banking/v1/depositors — List depositors for your institution, with optional name, institution_depositor_id, and depositor_type filters.POST /digital-banking/v1/accounts (Create Account)
signer_primary_tin (string, optional) — set the primary signer’s TIN at creation.account_officer (string, optional).is_non_interest_bearing (boolean, optional) — open a non-interest-bearing account.is_receiving_printed_statements (boolean, optional).custom_field_1–custom_field_4 (string, optional) — free-form, institution-defined metadata.PATCH /digital-banking/v1/accounts/{account_id} (Update Account)
account_officer and custom_field_1–custom_field_4 (all optional).POST /digital-banking/v1/depositors (Create Depositor)
institution_opt_out_federal_ids (string array, optional) — institutions to exclude from reciprocation for this depositor.PATCH /digital-banking/v1/depositors/{depositor_id} (Update Depositor)
account_ids (uuid array, optional) — set the depositor’s linked accounts.institution_opt_out_federal_ids (string array, optional).DELETE /digital-banking/v1/accounts/{account_id} (Close Account)
200 OK with a CloseAccountResponse body (account_id, liquidation_amount, scheduled_to_close_date) instead of 204 No Content. Clients that treat any 2xx as success are unaffected; those that checked specifically for 204 should update accordingly, and can now read the liquidation amount and scheduled close date directly from the response.AccountResponse — added metadata and TIN fields:
is_non_interest_bearing (boolean), account_officer (string, nullable), cost_center_id / cost_center_code (nullable), and custom_field_1–custom_field_4 (nullable).signer_primary_tin_last4 and beneficiary_tin_last4 (string, nullable) — last four digits of the relevant TINs; use the new TIN endpoints for full values.DepositorResponse
tin_last_four (string, nullable) — last four digits of the depositor’s TIN; use GET /digital-banking/v1/depositors/{depositor_id}/tin for the full value.institution_opt_out_federal_ids (string array).New schemas: AccountTINResponse, DepositorTINResponse, CloseAccountResponse
See below for our latest API changes. This release introduces Custom Benchmarks and floating / indexed rates — you can now tie account and pricing-group rates to market reference rates (SOFR, EFFR, Prime, and more) or to your own custom benchmarks, instead of managing fixed rates by hand. We recommend reviewing this page closely before beginning development or upgrading to a new API version.
Custom Benchmarks — Define and manage your own reference rates, then attach them to accounts and pricing-group rate tiers as a floating-rate index.
GET /digital-banking/v1/custom-benchmarks — List all custom benchmarks for your institution, including their current rates.POST /digital-banking/v1/custom-benchmarks — Create a custom benchmark with a name, optional description, and an initial rate (decimal, e.g. 0.0425 for 4.25%).GET /digital-banking/v1/custom-benchmarks/{custom_benchmark_id} — Retrieve a single custom benchmark.PATCH /digital-banking/v1/custom-benchmarks/{custom_benchmark_id} — Update a benchmark’s name and/or description. Does not change its rate.PUT /digital-banking/v1/custom-benchmarks/{custom_benchmark_id} — Set a new rate, optionally as of a future effective_at timestamp. Accounts indexed to the benchmark update automatically, and historical rates are preserved.DELETE /digital-banking/v1/custom-benchmarks/{custom_benchmark_id} — Delete a custom benchmark.POST /digital-banking/v1/accounts (Create Account) and PATCH /digital-banking/v1/accounts/{account_id} (Update Account)
rate_configuration and rate-index fields on AccountResponse below.AccountResponse — added rate-configuration fields:
rate_configuration (RateConfiguration enum, required) — how the account’s rate is determined: FIXED, FLOATING_MARKET, FLOATING_CUSTOM, or TIERED.rate (string, nullable), index_rate (string, nullable), and rate_index_type (ReferenceRateType, nullable) — the resolved rate and, for floating accounts, the market index it tracks.custom_benchmark_id (uuid, nullable) and custom_benchmark_rate (string, nullable) — the custom benchmark the account is indexed to, if any.floating_spread, floating_spread_bps, and floating_rate_percentage (nullable) — the spread/percentage applied over the index.InterestRateTier and PricingGroupRateTier (request & response)
rate_index_type (ReferenceRateType, nullable), custom_benchmark_id (uuid, nullable), and floating_rate_percentage (nullable) — rate tiers can now float against a market index or custom benchmark instead of being fixed.New enums
RateConfiguration — FIXED, FLOATING_MARKET, FLOATING_CUSTOM, TIEREDReferenceRateType — market reference rates including EFFR, SOFR_1M/SOFR_3M/SOFR_6M/SOFR_12M, CMT_3M, WSJ_PRIME, and Fidelity money-market ratesNew schemas: CreateCustomBenchmarkRequest, PatchCustomBenchmarkRequest, UpdateCustomBenchmarkRateRequest
See below for our latest API changes. This release extends StatementResponse with account and institution identifiers and adds full support for both account and institution statement types to GET /statements. It also expands transaction filtering options and adds is_receiving_printed_statements to account management. We recommend reviewing this page closely before beginning development or upgrading to a new API version.
POST /digital-banking/v1/accounts (Create Account)
institution_alternative_id (string, optional) — this field was present in v1.6.0 but has been removed from CreateAccountRequest in v1.6.1. Use PATCH /accounts/{account_id} to set this field post-creation if needed.PATCH /digital-banking/v1/accounts/{account_id} (Update Account)
submitted_by (string, optional, max 128) — identifies who submitted the update for audit purposes.is_receiving_printed_statements (boolean, optional) — controls whether the account receives printed statements.cost_center_id (uuid, optional) — internal cost center assignment.GET /digital-banking/v1/accounts/{account_id}/transactions (List Transactions)
start_datetime and end_datetime query parameters (datetime, optional) — timezone-aware datetime filters. Cannot be combined with start_date/end_date.page and page_size query parameters (integer, optional) — enables paginated responses.timezone query parameter (string, optional) — timezone for date-based filtering.AccountResponse
is_receiving_printed_statements (boolean, required) — indicates whether the account is enrolled in printed statements.StatementResponse
account_id (uuid, nullable) — the ID of the associated account, if applicable.institution_id (uuid, nullable) — the ID of the associated institution, if applicable.StatementType
INSTITUTION_MONTHLY_SETTLEMENT_POSTINGS, INSTITUTION_MONTHLY_COST_CENTER_SETTLEMENT_POSTINGS, INSTITUTION_MONTHLY_NBID.DepositorResponse
depositor_type changed from nullable to required — responses will always include this field. If you were handling null for depositor_type, update your parsing logic accordingly.CreateTransactionRequest
transacted_at description updated with backdating constraints: must be timezone-aware, within the current calendar month, and must not precede the most recent allocation cutoff (2:00 PM ET on the last business day at or before submission time). No functional change to the field type, but validation behavior may be stricter.GET /digital-banking/v1/files/statements
statement_type values are supported: ACCOUNT_MONTHLY_SWEEP, INSTITUTION_DAILY_SWEEP, INSTITUTION_DAILY_RECEIVE, INSTITUTION_MONTHLY_INTEREST, INSTITUTION_MONTHLY_NBID, INSTITUTION_DAILY_GL_POSTINGS, INSTITUTION_DAILY_GL_BALANCES, INSTITUTION_DAILY_COST_CENTER_POSTINGS, INSTITUTION_DAILY_COST_CENTER_BALANCES, INSTITUTION_DAILY_TRIAL_BALANCES, INSTITUTION_QUARTERLY_CALL_REPORT, INSTITUTION_WEEKLY_FR2900, INSTITUTION_DAILY_ACCOUNT_HISTORY, INSTITUTION_DAILY_TRANSACTION_HISTORY, INSTITUTION_DAILY_TRANSACTION_ERRORS, INSTITUTION_MONTHLY_SETTLEMENT_POSTINGS, INSTITUTION_MONTHLY_COST_CENTER_SETTLEMENT_POSTINGS. account_id is required when requesting account-level statement types; institution_id is required when requesting institution-level statement types.See below for our latest API changes. This minor version upgrade brings improved input validation, additional account and depositor flexibility, and cleanup of deprecated fields and endpoints.
DELETE /v1/accounts/{account_id} (Close Account)
POST /v1/accounts (Create Account)
signer_primary is now optionalinterest_rate is now optional with explicit validation (0 ≤ rate < 1)account_type now accepts the AccountType enum (MMDA, DDA)is_reciprocation_prioritized (boolean, default false) — prioritize this account for reciprocationprogram_tags (string array) — tag accounts with program identifiersPATCH /v1/accounts/{account_id} (Update Account)
depositor_ids is now optional — you no longer need to include it in every updateis_reciprocation_prioritized (boolean, optional)program_tags (string array, optional)account_type (AccountType enum, optional)institution_alternative_id (string, optional, deprecated)POST /v1/depositors (Create Depositor)
internal_depositor_id has been replaced by institution_depositor_id, which was introduced in v1.5.1Input validation improvements — maxLength constraints have been added to string fields across CreateAccountRequest, CreateDepositorRequest, CreateTransactionRequest, UpdateTransactionRequest, AddressData, and PhoneNumberData. EmailData.email_address now validates email format, and AddressData.country_code requires a two-character ISO 3166-1 alpha-2 code. Notable limits: account_title (128), signer_primary/signer_secondary (64), beneficiary_tin (9), tin (64), first_name/last_name (32), transaction description (256).
AccountResponse
signer_primary is now nullableinstitution_alternative_id (string, nullable, deprecated)is_reciprocation_prioritized (boolean, required)institution_account_id is now marked as deprecatedDepositorResponse
tin is now nullable and marked deprecated — plan to migrate away from reading this field from responsesGET /v1/accounts/{account_id}/documents/monthly-statements — This previously deprecated endpoint has been removed. Use GET /v1/files/statements with statement_type=ACCOUNT_MONTHLY_SWEEP instead.Happy New Year from the ModernFi team! See below for our latest API changes.
This release introduces Pricing Groups — a new resource for managing interest rates at scale across your accounts. Instead of updating rates on individual accounts one at a time, you can now define reusable rate tier structures and assign them to multiple accounts. When a group’s rates change, all assigned accounts are updated automatically.
GET /v1/pricing-groups — List all pricing groups for your institution, including account counts and current rate tiers.POST /v1/pricing-groups — Create a new pricing group with rate tiers. Optionally assign accounts at creation time.GET /v1/pricing-groups/{pricing_group_id} — Retrieve details for a specific pricing group.PATCH /v1/pricing-groups/{pricing_group_id} — Update pricing group name and description. Does not affect rates or account assignments.DELETE /v1/pricing-groups/{pricing_group_id} — Delete a pricing group. Fails if accounts are still assigned — unassign them first.PUT /v1/pricing-groups/{pricing_group_id}/rates — Replace rate tiers for a pricing group. New rates cascade to all assigned accounts on the specified effective date, while preserving historical rate data.POST /v1/pricing-groups/{pricing_group_id}/accounts — Assign accounts to a pricing group. Accounts already in another group will be reassigned.DELETE /v1/pricing-groups/{pricing_group_id}/accounts — Unassign accounts from a pricing group. They retain their current rates but no longer receive automatic updates when the group’s rates change.POST /v1/accounts (Create Account)
pricing_group_id (uuid, optional) — assign the account to a pricing group at creation. The group’s rate structure will be applied automatically.AccountResponse
pricing_group_id (string, nullable) — the pricing group this account belongs to, if anyNew schemas: PricingGroupResponse, PricingGroupRateTierRequest, PricingGroupRateTierResponse, CreatePricingGroupRequest, UpdatePricingGroupMetadataRequest, UpdatePricingGroupRatesRequest, AssignAccountsToPricingGroupRequest, UnassignAccountsRequest, AccountData
Fall updates are here! See below for our latest API changes.
This release adds depositor update support, account monthly statement configuration, tiered interest rates on accounts, and a batch of new optional fields across account and depositor schemas.
We’ve also expanded the StatementType enum to cover a wider range of institutional reporting needs.
Monthly Statement Configuration — Three new endpoints for managing the layout and content of account monthly statements.
GET /v1/files/account-monthly-statement-config — Retrieve the current statement configuration for your institution.POST /v1/files/account-monthly-statement-config — Create or update statement configuration including title, disclosures, contact info, closing paragraph, regulatory mark display, and account ID masking.GET /v1/files/preview-account-monthly-statement — Preview a rendered statement using the current configuration.Depositor Updates
PATCH /v1/depositors/{depositor_id} — Update depositor details. Supports updating name, contact information, institution_depositor_id, depositor_type, ownership_category, account_officer, notes, and approval_status.POST /v1/accounts (Create Account)
interest_rate_tiers (array of InterestRateTierRequest, optional) — define balance-based rate tiers. If only one tier is needed, continue using the interest_rate field.is_apy (boolean, default false) — indicates whether the rate is an APY vs. nominal interest ratedepositor (CreateDepositorRequest, optional) — create and link a new depositor inline during account creationshadow_account (ShadowAccountRequest, optional) — configure a shadow accountmanaged_sweep_target_balance (number/string, optional) — target balance for managed sweep accountsaccount_agreement_file_data (string, optional) — base64-encoded PDF, max 25MBnotes (string, optional, max 256)institution_cost_center_id, institution_alternative_id, submitted_by (all string, optional)PATCH /v1/accounts/{account_id} (Update Account)
account_title, signer_primary, signer_secondary, beneficiary_name, institution_sweep_account_id, institution_return_account_id — these fields are now updatable via PATCHmanaged_sweep_target_balance, notes, institution_cost_center_id, submitted_by (all optional)POST /v1/depositors (Create Depositor)
account_ids (uuid array, optional) — link existing accounts at depositor creationdepositor_type (DepositorType enum, optional)ownership_category (OwnershipCategory enum, optional)account_officer (string, optional, max 128)notes (string, optional, max 256)POST /v1/accounts/{account_id}/transactions (Create Transaction)
submitted_by (string, optional, max 128)GET /v1/files/statements (Get Statements)
ACCOUNT_MONTHLY_SWEEP) are available at this time. Institution statement support is planned for Q1 2026.AccountResponse
interest_rate_tiers (array of InterestRateTierResponse) — returns the account’s rate tier structureshadow_account (ShadowAccountResponse, nullable)managed_sweep_target_balance (string, nullable)notes (string, nullable)DepositorResponse
depositor_type (DepositorType enum, nullable)ownership_category (OwnershipCategory enum, nullable)account_officer (string, nullable)notes (string, nullable)StatementType — 10 new enum values added:
INSTITUTION_DAILY_GL_POSTINGS, INSTITUTION_DAILY_GL_BALANCES, INSTITUTION_DAILY_COST_CENTER_POSTINGS, INSTITUTION_DAILY_COST_CENTER_BALANCES, INSTITUTION_DAILY_TRIAL_BALANCES, INSTITUTION_QUARTERLY_CALL_REPORT, INSTITUTION_WEEKLY_FR2900, INSTITUTION_DAILY_ACCOUNT_HISTORY, INSTITUTION_DAILY_TRANSACTION_HISTORY, INSTITUTION_DAILY_TRANSACTION_ERRORSNew enums:
DepositorType — CONSUMER, BUSINESS, NONPROFIT, LOCAL_GOVERNMENT, FEDERAL_GOVERNMENT, US_DEPOSITORY, FOREIGN_DEPOSITORY, FOREIGN_GOVERNMENTOwnershipCategory — 16 values covering consumer, business, nonprofit, government, and depository ownership typesApprovalStatus — PENDING, APPROVED, REJECTEDHappy summer from the ModernFi team! See below for our latest API updates.
This update removes legacy ledger transaction support and introduces enhancements that align with new account routing features and improved reconciliation workflows. These changes pave the way for more seamless integrations with external financial systems.
GET /v1/accounts/{account_id}/ledger-transactions — Deprecated and removed. This endpoint previously returned raw ledger transaction data.GET /v1/accounts/{account_id}/documents/monthly-statements — Updated request/response schema to support richer metadata and future extensibility.
GET /v1/accounts/{account_id}/transactions — Response schema updated to include new institution metadata fields.
PATCH /v1/accounts/{account_id}/transactions/{transaction_id} — Now accepts institution_transaction_id in the request payload for improved traceability.
This update introduces file retrieval functionality with two new /files endpoints for fetching statements and downloading files via presigned URLs. It also includes schema refinements for transactions and improved documentation.
GET /v1/files/statements — Retrieve available statements for accounts.GET /v1/files/{file_id} — Generate presigned URLs for secure file downloads.This update adds support for institution-specific account IDs and provides additional metadata in transaction responses. No breaking changes in this release.
Institution-Specific Account IDs — Added support for custom account identifier formats, improved account lookup and validation, and enhanced cross-referencing between internal and external account IDs.
Transaction Response Metadata — Transaction responses now include additional metadata fields for improved tracking, reconciliation, and audit trail capabilities.