AP Approval Workflow
Every new bill is routed automatically to the right approval tier — auto-approve, operations, or advisor + owner — based on its amount, contract match, and risk. Configure dollar thresholds and per-tier approvers once, then work the queue from the dedicated Pending Approvals sidebar entry with a "Waiting on me" filter, email, and optional Slack notifications.
Key capabilities
- Automatic routing into auto-approve, operations, or advisor + owner tiers based on amount and contract match
- Three-tier approval chain with per-business amount thresholds
- Per-tier approver assignment — choose who can sign off at each gate
- Dedicated Pending Approvals queue with tier filter, "Waiting on me" toggle, and inline approve/reject with comments
- AI risk scoring (0-100 with up to three factors) shown inline on each card
- Bulk-approve low-risk bills (risk score below 40) in one click
- Personal pending-count badge that counts only bills waiting on your tiers
- Email and optional Slack notifications when a bill enters a gate
- Firm-wide visibility at Settings > Approval Policies, plus a full audit trail
How it works
When a bill is created — manually, by AI, or from an email — the workflow reads its amount and contract match status and picks a tier. Each gate waits for a human response before the next runs.
flowchart TD
bill["New bill"] --> signals["Risk score + contract match"]
signals --> route{"Amount & contract"}
route -->|"<= auto-approve, matched"| auto["Auto-approved"]
route -->|"<= ops threshold"| ops["Operations approval"]
route -->|"> ops, over_contract, or needs_review"| adv["Advisor + Owner approval"]
auto --> ready["Approved - ready to pay"]
ops --> ready
adv --> readyHow to use it
- Open AP Approvals (under Accounts Payable) and click Set Up Approval Policy if you haven't yet.
- Set the Auto-Approve threshold — bills at or below it with a matched contract approve automatically.
- Set the Ops Approval threshold — bills between the auto-approve limit and this amount go to operations approvers.
- Click Manage approvers to pick who can sign off at each tier (Operations, Advisor, Owner).
- As bills are created, the workflow starts automatically — open Pending Approvals to work the queue (the badge shows how many bills wait on you).
- Toggle the Waiting on me pill to filter to only the gates your account approves.
- Click Approve to advance a bill, or Reject to add a comment — each bill shows as a card with vendor, amount, tier, and risk score.
- Use Score risk to flag duplicate or suspicious bills, then Bulk Approve Low-Risk to clear the easy ones.
- Advisory firms manage thresholds across all clients from Settings > Approval Policies.
Pro tips
- Start conservative (e.g. auto-approve under $500, ops up to $5,000) — re-provisioning is idempotent, so clicking Set Up Approval Policy again safely resets thresholds to defaults without breaking bills already in flight.
- Assign at least one approver per tier — until you do, any user can respond to that tier (fine for small teams, weak governance for larger ones).
- Run AI risk scoring before working the queue: bulk-approve low-risk bills, then focus on higher-risk items.
- Add rejection comments so vendors understand returns — quick-pick reasons speed up common cases like duplicate invoices.
- Keep vendor contracts current:
over_contractorneeds_reviewbills skip auto-approve regardless of amount.
In-depth guide
How routing works
When a bill is created (manually, via AI, or from an email/upload), DayZero automatically starts the AP approval workflow. It reads the bill's amount and contract match status and picks a tier:
- Auto-approve — bills at or below the auto-approve threshold with a matched contract are approved automatically.
- Operations — bills up to the ops threshold go to Operations.
- Advisor + Owner — bills above the ops threshold, or flagged
over_contract/needs_review, go to Advisor review and then Owner approval. - Sequencing — each gate waits for a human response before the next step runs.
Setting thresholds
- Adjust thresholds — click "Adjust thresholds" to set the auto-approve and ops limits (the Ops threshold must exceed the auto-approve threshold).
- When changes apply — to bills created after the change; bills already in flight continue through the tier they were routed into.
- Idempotent provisioning — clicking "Set Up Approval Policy" again with the default values resets the thresholds back to those defaults, so you can use it as a reset button.
- Firm-wide — advisory firms can update thresholds across all client businesses from Settings > Approval Policies.
Assigning approvers
- Manage approvers — click "Manage approvers" on the AP Approval page to pick who can respond to each tier.
- Stored per tier — Operations, Advisor, Owner.
- No approvers assigned — any user on the business can respond to that tier (legacy, permissive behavior).
- At least one approver assigned — only those users can approve or reject at that tier; others receive a 403.
- Counts — approver counts appear on the AP Approval page and the firm-wide Approval Policies page.
Responding to approvals
- Queue — open the Pending Approvals sidebar entry to see every bill awaiting a response; each shows as a card with vendor, amount, tier, risk score, and time pending.
- Approve — advances the bill (or completes it if it's the last gate).
- Reject — adds an inline comment; quick-pick reasons like "Duplicate invoice" or "Wrong amount" are available.
- Filters — use the tier filter pills to focus on one tier, or the "Waiting on me" pill to hide gates you don't approve.
- Bulk approve — with AI risk scoring on, bills scoring under 40 can be bulk-approved in one click.
- Bill detail modal — you can also respond there; it shows an approval card when a workflow is pending.
Sidebar badge
- Polling — the Pending Approvals badge polls every 30 seconds.
- Personal — it counts only bills waiting on tiers you're configured to approve, so users not on any tier see no badge.
- Full queue — clear the "Waiting on me" toggle to see the firm-wide queue when triaging on someone else's behalf.
Notifications
- On entering a gate — DayZero emails the approvers for that tier, and posts to Slack if a webhook is configured.
- Best-effort — if delivery fails, the workflow still suspends correctly and the bill still appears on the Pending Approvals page.
Contract match status
Every bill carries a contract match status:
matched— it aligns with a known vendor contract.over_contract— it exceeds contract terms.needs_review— the system couldn't confidently match it.- Escalation — the workflow escalates
over_contractandneeds_reviewbills even when their amount would otherwise auto-approve, so keep vendor contracts current.
AI risk scoring
- Trigger — click "Score risk" to score draft and pending bills.
- What it checks — the model looks for duplicate invoices, unusual amounts, and other patterns, returning a 0-100 score with up to three short factors.
- Workflow — work the highest-risk bills first and revisit the factors when you need context before approving.
Audit trail
- Per response — every approval or rejection writes a row to the audit log (Settings > Audit Log) with the responding user, the bill, the tier, and the workflow execution id.
- Workflow events — started, suspended, resumed, completed, and failed are logged too.
- Result — a full history of who approved what, when, and why, useful for close, investigations, and SOC reviews.
Firm-wide management
Advisory firms manage approval policies for all clients at Settings > Approval Policies:
- Overview — shows each client's thresholds, whether the workflow is enabled, and the total approvers assigned.
- Actions — enable the workflow, adjust thresholds, or jump into a client's AP Approval page.
Rollout and feature flag
Automatic routing is gated by the feature_ap_approval_auto_route flag:
- Flag off — the AP Approval page still configures thresholds and approvers, but bills are approved manually from the Bills page.
- Flag on — newly created bills start the workflow automatically.
- Existing drafts — are not retroactively routed.
Start free and put controls on every dollar that goes out.