Approvals
Route requests through multi-step approval ladders with role- or user-targeted steps, delegation, and escalation.
Approvals let you gate sensitive actions — like deep discounts — behind a defined chain of sign-offs. A request climbs an approval ladder one step at a time and only resolves when the final step approves or any step denies.
Where approvals live
| Route | Purpose |
|---|---|
/inbox/approvals | Your approver inbox — requests waiting on you |
/approvals | The full list of approval requests |
/approvals/[id] | The detail view for a single request, including its step ladder |
/admin/approvals/workflows | Where admins define approval workflows |
How a workflow is structured
An approval workflow is a sequence — a ladder — of named steps. Each step targets an approver, either by role or by a specific user. Admins build and maintain these workflows from /admin/approvals/workflows.
Workflow authoring is admin-only
Only administrators define approval workflows. As an approver, you act on the steps a workflow assigns to you.
The built-in discount ladder
Pact ships with a discount approval ladder out of the box:
- A discount above a threshold requires a Manager approval step.
- A larger discount adds a second CRO approval step on top of the Manager step.
This gives smaller discounts a single gate and deeper discounts a two-step gate, without any custom configuration.
How decisions advance
Decisions move the request through the ladder one step at a time:
- Each approval advances the request to the next step.
- The request resolves as approved only when the final step approves.
- The request resolves as denied immediately if any step denies.
Requests that have no workflow attached stay single-step, so existing single-approver flows keep working unchanged.
Backward compatible
A request without a workflow behaves as a simple, single-step approval — multi-step ladders are additive, not a breaking change to how approvals already worked.
Delegation
If you're the assigned approver on the active step but someone else should decide, you can delegate the active step to another approver. The request stays on the same rung of the ladder; only who acts on it changes.
Escalation for stalled steps
Admins can run a timeout and escalation sweep that targets steps which have sat unanswered for too long, so a stalled approval doesn't quietly block a request indefinitely.
Viewing the full ladder
For any request, you can view the complete step ladder along with its current position — so it's always clear which steps have been decided, which step is active, and what's still ahead.