Hold Period Timer & Clawback Reserve — How It Works
Hold Period Timer & Clawback Reserve — How It Works
Introduced in v1.0.51, the hold period timer and clawback reserve calculation are the core mechanisms that protect the platform — and agents — from financial exposure caused by reversed or failed Direct Debit collections.
Overview
After funds are swept from the Modulr collection account into the Griffin DD holding account, two things happen automatically:
- A clawback reserve check is performed to determine whether there is enough of a buffer in the holding account to absorb potential reversals.
- If the reserve is satisfied, a delayed forward step is scheduled to release funds to the agent's client account after the configured hold period.
If the reserve is not satisfied, the forward is withheld and a reserve_low alert is raised.
The Hold Period Timer
The timer is implemented as an Inngest function that fires after each successful sweep. It schedules the forward step to execute org.holdPeriodHours from the time the sweep completes.
org.holdPeriodHoursis configured per organisation (letting agent).- The default is 24 hours, giving the BACS network sufficient time to surface any clawbacks before funds are released.
- The forward step only executes if the reserve requirement is still satisfied at the time it runs.
Clawback Reserve Calculation
The required reserve is calculated as:
reserve_required = max(org.clawbackMinGBP, totalOutstandingCollections × org.riskFactor)
Parameters
| Parameter | Description |
|---|---|
org.clawbackMinGBP | Minimum absolute reserve in GBP, configured per organisation. Acts as a floor regardless of collection volume. |
org.riskFactor | A decimal multiplier (e.g. 0.05 = 5%) applied to the total value of outstanding collections. |
totalOutstandingCollections | The total GBP value of collections that are within the hold period and not yet forwarded. |
Example
Given:
org.clawbackMinGBP= £500org.riskFactor= 0.05 (5%)totalOutstandingCollections= £8,000
reserve_required = max(£500, £8,000 × 0.05)
= max(£500, £400)
= £500
In this case the minimum floor applies. If outstanding collections were £12,000:
reserve_required = max(£500, £12,000 × 0.05)
= max(£500, £600)
= £600
Here the risk-factor-based amount exceeds the floor, so £600 must remain in the holding account.
What Happens When the Reserve Is Insufficient
If the holding account balance would fall below reserve_required after releasing funds:
- The forward step is not scheduled.
- A
reserve_lowalert is raised and stored in the system. - Configured alert recipients are notified by email.
- The reserve is re-evaluated automatically when the next collection completes — if the reserve is then satisfied, the forward can proceed.
Reserve Re-Evaluation
The reserve check does not only run at sweep time. It is re-evaluated on every new collection. This means:
- As more tenant payments are collected and land in the holding account, the available balance grows.
- If a previously insufficient reserve becomes satisfied by the additional funds, the system can schedule the held forward without manual intervention.
Decision Flow
Sweep completes
│
▼
Calculate reserve_required
│
▼
Holding balance ≥ reserve_required?
│ │
YES NO
│ │
▼ ▼
Schedule forward Raise reserve_low alert
after holdPeriod Hold funds
Re-evaluate on next collection
Configuration Reference
These values are set per organisation and can be updated via the API.
| Field | Type | Description |
|---|---|---|
holdPeriodHours | integer | Hours to hold funds after sweep before forwarding |
clawbackMinGBP | decimal | Minimum reserve floor in GBP |
riskFactor | decimal | Fraction of outstanding collections to hold in reserve |