v1.0.53: Automated Fund Forwarding from Holding to Agent Client Account
v1.0.53: Automated Fund Forwarding from Holding to Agent Client Account
Release: v1.0.53
With v1.0.53, the Direct Debit fund pipeline is now fully automated end-to-end. This release introduces the final transfer step: automatically forwarding collected funds from the Griffin DD holding account to the agent's Griffin client account once the hold period has elapsed and the clawback reserve is satisfied.
How It Works
1. Hold Timer Triggers Forwarding
When a collection is swept into the Griffin DD holding account, a hold timer is scheduled. Once that timer fires (after the configured hold period — default 24 hours), an Inngest background function is invoked to begin the forwarding process.
2. Clawback Reserve Verification
Before any funds move, the function re-verifies that the clawback reserve is still satisfied at the moment of execution. This is an active check — not a snapshot from when the hold started — ensuring the reserve requirement reflects current conditions.
If the reserve is not satisfied, the forward is deferred until the reserve is met.
3. Griffin Payment Initiation
Once the reserve check passes, the service submits a payment via Griffin from the DD holding account to the agent's configured Griffin client account. This makes the funds available to the agent (and ultimately the landlord).
4. Transaction Status Update
Upon successful initiation of the payment, the holding_transaction record is updated to a status of forwarded, providing a clear audit trail of the fund's lifecycle.
5. Failure Handling
If the forward attempt fails for any reason:
- An alert is raised within the service, visible via the alerts API.
- The Inngest function retries automatically using exponential backoff, ensuring transient failures (e.g. a temporary Griffin API outage) are resolved without manual intervention.
6. Webhook Notification
Once a forward completes successfully, the service fires a collection.forwarded webhook event to the registered consuming application endpoint. This allows downstream systems (such as agentOS) to react immediately — for example, updating ledger records, notifying landlords, or marking rent as received.
Webhook Event: collection.forwarded
Fired when funds have been successfully forwarded from the Griffin holding account to the agent's client account.
{
"event": "collection.forwarded",
"data": {
"holding_transaction_id": "<id>",
"collection_id": "<id>",
"agent_id": "<id>",
"amount": 120000,
"currency": "GBP",
"forwarded_at": "2025-07-17T10:30:00Z"
}
}
Amounts are in pence (GBP × 100).
Holding Transaction Lifecycle
With this release, a holding_transaction can now reach its terminal state:
| Status | Description |
|---|---|
pending | Funds swept into the holding account; hold timer started |
held | Hold period active; clawback reserve being monitored |
forwarded | Funds successfully transferred to the agent's client account |
failed | Forward attempt failed; alert raised, retrying |
Fund Flow Summary
This release completes the full pipeline:
Tenant Bank Account
└─▶ Modulr Collection Account (BACS collection)
└─▶ Griffin DD Holding Account (sweep after confirmation)
└─▶ Griffin Agent Client Account (forward after hold + reserve check) ✅ NEW
Configuration
The hold period and clawback reserve thresholds are configurable per customer (letting agent). Refer to your customer configuration to adjust:
- Hold period — duration funds are held before forwarding is attempted (default: 24 hours).
- Clawback reserve — minimum balance that must remain in the holding account after a forward. Calculated using the configured risk factor and minimum threshold.