One-step approval, or write the engine yourself
Most B2B platforms ship one approval pattern: one approver, all-or-nothing, hard-coded to orders. Everything else (multi-level chains, spending-limit conditions, timeout escalation, customer-side approvers) turns into custom code or a queue your team babysits.
Vendure Platform ships a generic approval engine. Policies are data. Conditions and resolvers are pluggable. The chain is configurable per policy. Orders, quotes, returns, and custom entities all run on the same machinery.
An approval system, not an approval feature
Chains, conditions, resolvers, timeouts, escalations, and an approver-side dashboard. The pieces a real procurement workflow needs.
Multi-level chains, ANY or ALL semantics
Configure as many levels as your policy needs. Each level decides whether one approver is enough (ANY) or every approver must sign off (ALL). Sequential between levels, parallel within a level. Spending-limit chains, named-approver chains, role-based chains all compose from the same primitives.
Conditions, built-in and custom
Trigger approvals based on data on the entity: order total over a threshold, discount over a percentage, a custom flag on a quote. Vendure ships baseline conditions; custom conditions plug into the same ApprovalCondition interface and surface in the policy editor.
Resolvers: named, role-based, hierarchy-based
Resolve the approver dynamically. Named approver, customer role, company manager, business unit lead, or a custom resolver that calls your HR system. Approvers can be Vendure administrators or customer-side users.
Timeouts and escalation
Set a timeout per chain level. When it expires, the request auto-approves, auto-rejects, or escalates to the next level (your choice per policy). No silent stalls in approver inboxes, no cron job to manage manually.
Approver dashboard and delegation
Approvers see their pending decisions in the admin dashboard or the customer portal, with full context on the entity. Decisions are first-class records: approve, reject, request changes, delegate. The decision history is auditable end to end.
Extend approvals to any entity with one handler
Approval Workflows runs on Vendure's Workflow Engine. Each approval request is a long-lived workflow instance: durable, observable, and replayable.
Plugging in an entity takes a single ApprovalEntityHandler. Declare the entity type and how to load it for condition evaluation. Wire onApproved and onRejected, plus onChangesRequested and onCancelled if the policy needs them. The plugin handles the engine, the policy editor, the approver dashboard, and the audit hooks.
Vendure registers handlers for orders and quotes out of the box. Custom entities (returns, supplier onboarding, contract changes) follow the same shape.
Three approval shapes, one engine
The same engine covers spending-limit gates, discount sign-off, and compliance approval on custom entities.
One handler per entity. Everything else is already there.
Need a new approval target (returns, refunds, contract changes, supplier onboarding)? Write one ApprovalEntityHandler and the rest of the system follows. Custom conditions and resolvers plug in through the same ConfigurableOperationDef pattern your team already uses for shipping calculators and payment methods.
Trusted by complex B2B commerce and enterprise retail.
What procurement and engineering teams ask
Common questions when evaluating Approval Workflows against a flat "request approval" feature or a custom-code approval layer.
Where approvals fit in the B2B stack
Approval Workflows is one of six B2B buying plugins on Vendure Platform.




