
Error Handling
Part of Human approvals in technical workflows
Expiring an approval request that receives no response
Set a business deadline, close an unanswered approval through a controlled transition and prevent late responses from authorising an action.
Set a business deadline when an approval is created. At that deadline, close the unanswered request under a recorded rule and block the action it would have authorised.
A reminder or a timed-out workflow run does not prove the approval request itself has closed.
For a purchase needed before a supplier cut-off, record the deadline, its time basis and the owner of unanswered work. A platform's maximum wait is a technical limit, not the business expiry rule.
Set the deadline and next route
Keep the request ID, issue time, expiry instant, assignee and state. Show the deadline to the approver in an unambiguous local time zone, and store an instant suitable for comparisons.
Define whether no response leads to cancellation, escalation, a new request or manual review. Silence must not become consent by default.
A reminder should refer to the same open request. If escalation gives another person authority, decide whether the original request is reassigned or closed and replaced. Two live requests must not each be able to release the same action.
Resolve the deadline race
Use one authoritative acceptance rule: accept a decision only when its recorded acceptance time is before the expiry instant. At the deadline, change awaiting_decision to expired only if the request is still open.
The response handler should likewise accept a decision only if the request is open and within that time rule. Use a conditional write or equivalent controlled transition so expiry and response cannot each claim the same request.
If the decision wins, the expiry job leaves it unchanged. If expiry wins, retain any late response as an attempted response without authorising the action. Close or cancel remaining wait and notification routes where the selected platform supports that, and leave the business request with its next owner.
Key Metrics for Approval Expiry Management
- Expiry Enforcement Method
- Conditional write or controlled transition
- Request State After Expiry
- `expired` (if open), no action authorised
Treat platform timeouts separately
Microsoft's approvals known-issues page says an approval flow can wait for 28 days. If the wait exceeds that, the flow fails while the approval continues to exist in the action centre. A failed wait therefore does not prove the request disappeared or that its business state became expired.
In supported AWS Step Functions Standard Workflow callbacks, a task can wait for a token. Check the selected workflow type and configuration against the intended deadline. The workflow route still has to update the separate business approval record.
An expired request needs a clear next step: close the business request, escalate it under a defined rule or create a new approval for current terms. Give any new request its own ID and deadline. Keep the earlier request's expired state so a delayed response cannot be mistaken for the current decision.
Platform Handling of Approval Timeouts vs Business Expiry
- Microsoft Power AutomateFlow can wait up to 28 days; failure does not mean approval expired. Approval remains in Action Centre.
- AWS Step FunctionsTask can wait for a token; timeout depends on workflow configuration. Business record must still be updated independently.
- Business RuleExpiry is governed by business deadlines, not technical limits. Must be enforced via controlled transitions.



![How to choose the right idempotency key for an event: Keep the same idempotency key for retries of one action; use a new key for a new action.; Write: one [effect] for each [identity], e.g. one standard invoice per approved order.; Check stability, uniqueness, scope and lifetime; include tenant ID for tenant-scoped IDs. Choosing an idempotency key for an event](/covers/choosing-an-idempotency-key-for-an-event-640.webp?v=39704930)