Documentation

Savings and money market

Money market accounts, interest accrual, auto-sweep, and rate tiers.

A money market account is a higher-yield savings product with tiered interest rates and a Regulation D-style cap on monthly withdrawals (typically six). The savings sub-module under /banking/money-market/* covers account creation, deposits, withdrawals, sweep configuration, and the cron jobs that accrue and pay interest.

Accounts

Create

POST/banking/money-market/accountsJWT
{
  "holderId": "holder_abc",
  "productId": "default",
  "linkedAccountId": "acc_checking_abc",
  "initialDeposit": 5000.00
}

Creates a money market account linked to a regular bank account for funding. The linked account is where deposits are pulled from and where interest is paid (or where withdrawals land).

Read

GET/banking/money-market/accounts/{accountId}JWT
GET/banking/money-market/holder/{holderId}JWT

The latter returns all money market accounts for a holder.

Deposits and withdrawals

Deposit

POST/banking/money-market/accounts/{accountId}/depositJWT
{
  "amount": 1000.00,
  "source": {
    "type": "internal_transfer",
    "accountId": "acc_checking_abc",
    "description": "Monthly savings contribution"
  }
}

Pulls funds from the linked checking account via internal transfer and credits the money market account. Posts a balanced journal entry: debit checking, credit money market.

Withdraw

POST/banking/money-market/accounts/{accountId}/withdrawJWT
{
  "amount": 500.00,
  "destination": {
    "type": "internal_transfer",
    "accountId": "acc_checking_abc",
    "description": "Withdrawal to checking"
  }
}

Increments the monthly withdrawal counter on the account. After six withdrawals in a calendar month (configurable per product), further withdrawals are rejected until the counter resets on the 1st.

Auto-sweep

Sweep moves excess balance between checking and money market on a schedule. Useful for keeping working capital in a high-yield account while preserving a target balance for day-to-day spending.

PUT/banking/money-market/accounts/{accountId}/sweepJWT
{
  "sourceAccountId": "acc_checking_abc",
  "targetBalance": 5000.00,
  "sweepThreshold": 1000.00,
  "sweepFrequency": "weekly"
}
FieldTypeDescription
sourceAccountId*string

The linked checking account.

targetBalance*number

Desired balance in checking after sweep.

sweepThreshold*number

Minimum excess required to trigger a sweep. Excess = checking balance - targetBalance. If excess < threshold, no move.

sweepFrequency*'daily' | 'weekly' | 'monthly'

How often the sweep job runs against this account.

The actual sweep runs as a scheduled job (typically nightly). The endpoint configures the rule; execution happens on cadence.

Rate tiers

Money market rates are tiered by balance — higher balances earn higher APY.

Create a tier

POST/banking/money-market/rate-tiersJWT
{
  "productId": "default",
  "minBalance": 0,
  "maxBalance": 9999.99,
  "apy": 3.5
}

Add tiers in increasing balance brackets. The platform picks the right tier per account at accrual time based on the average daily balance for the period.

Get tiers

GET/banking/money-market/rate-tiersJWT

?productId=default. Returns the configured tier ladder.

Interest accrual

Interest accrues daily and pays monthly. Two cron endpoints drive this:

POST/banking/money-market/admin/accrue-interestJWT

Run daily — typically at midnight UTC. Computes one day's interest at the account's current tier rate against current balance, posts an accrual entry to the ledger, and adds to the account's accrued-interest counter.

POST/banking/money-market/admin/pay-interestJWT

Run monthly — typically on the 1st. Capitalises accrued interest into the balance, posts the corresponding journal entry, and resets the accrued counter.

POST/banking/money-market/admin/reset-withdrawalsJWT

Run monthly. Resets each account's withdrawal counter to zero so the Reg D-style cap restarts.

These are admin endpoints — schedule them externally (cron, GitHub Actions, k8s CronJob) or via Automation. The platform does not invoke them on a built-in clock.

Stats

GET/banking/money-market/statsJWT

Aggregate totals across the org: account count, total balance, average APY, total interest paid YTD.

Reg D's six-withdrawal limit was suspended by the Federal Reserve in 2020. The platform still enforces a configurable cap because many sponsor banks retain the rule in their account agreements — confirm your sponsor's stance and adjust the per-product limit accordingly.

Standalone savings accounts

The plain savings and business_savings account types from the Accounts module are simpler — no tiered rates, no auto-sweep, no monthly withdrawal cap by default. Use those for basic savings products and the money market endpoints when you need yield tiers and sweep automation.