Approval workflows are available on Professional and Enterprise plans.
Overview
Approval workflows let you gate requirements or guardrail changes. Configure multi-phase flows with flexible approval criteria based on specific users, roles, or permissions. Without an active approval flow, requirements and guardrail regenerations are auto-approved immediately. With a flow configured, submissions enter a pending state and require explicit approval before proceeding.Key Concepts
Target Types
Approval flows can be configured for these submission types. Create / update / delete are split per entity so different policies can apply to each (e.g. a flow could require approval on delete but not on create):Pending state and final disposition
Approval-gated actions never reach their final state until the request is approved.- Creates and updates stage the proposed data in the affected table itself, marked
PROPOSED(overrides) orPROPOSEDlifecycle (requirements). Read paths filter these out so users only see live state. - Deletes carry no pending state on the row — the open approval request itself is the pending marker. On approve the row is soft-deleted via
deleted_at; on reject the row is untouched. Soft delete keeps the audit trail intact and makes restoration trivial. - An override update writes a new
PROPOSEDrow whosesupersedes_idpoints at the existingACTIVErow. On approve, the superseded row is soft-deleted and the proposed row flips toACTIVE. On reject, the proposed row is soft-deleted and the active row stays live.
Specific-user criteria
SPECIFIC_USER criterion values are stored as user_uid (the stable 5-word identifier). The UI surfaces and accepts login_identifier (email / UPN / SSO sub) so authors and approvers see human-readable handles; the form picker stores the corresponding user_uid under the covers. Even when an approver holds requirements:approve or guardrails:approve, they can only decide on a request if they satisfy the active phase’s expression — being named in a SPECIFIC_USER rule, for example.
Creating an Approval Flow
Navigate to Approval Management and select the Workflows tab.Flow Configuration
- Name and description - Give the flow a meaningful name
- Target types - Select which submission types trigger this flow
- Phases - Define one or more sequential approval phases
- Default flow - Optionally mark as the default for its target types
- Auto-regenerate invalid guardrails without approval - An optional configuration, shown only when
guardrail_regenerationis a target type. When enabled, automatic regeneration due to a failure at runtime skips this flow and proceeds without approval. User-initiated regenerations still require approval.
Target selectors (entity filters)
Target types decide which kinds of change a flow gates; an optional target selector narrows it to which entities — for example only enforced requirements, only marketplace ones, or only changes with a given lifecycle status. Lifecycle matching is on the resulting status — the status the requirement will hold after the change (the outcome you’re putting behind approval), not the status it’s in now. The builder labels this rule Resulting Status. Match the state each change produces:- Accepting a proposal brings it live at
beta(the entry maturity —stableis a separate, later promotion), so gate go-lives with abetaselector. - Declining a proposal lands it at
declined, so gate declines withdeclined. - Restoring a declined requirement returns it to
proposedfor re-triage, so gate restores withproposed.
Approval Expressions
Each phase defines an approval expression using a logical tree:- Specific User - A named user must approve (matched by user UID)
- Role - Any user with the specified role can approve
- Permission - Any user with the specified permission can approve
Multi-Phase Flows
Phases execute sequentially. Each phase must be fully approved before the next begins. If any phase is rejected, the entire request is rejected. Example: A two-phase flow for new requirements:- Technical Review - Any contributor approves
- Compliance Sign-off - Security auditor approves
Reviewing Approval Requests
Navigate to the Pending Reviews tab in Approval Management. Each request shows:- The submitted entity (requirement name, guardrail code snippet)
- Current phase and progress
- Approve / Reject buttons (visible only if you have the required permission)
Decisions
- Approve - Records your approval for the current phase. If the phase’s approval expression is now satisfied, the flow advances to the next phase (or completes).
- Reject - Immediately rejects the entire request regardless of phase. The submitter is notified.
Feedback
You can provide feedback on any pending request without making an approval decision:- Vote - Upvote or downvote (one vote per user per request, toggleable)
- Comment - Up to 280 characters. Edits are tracked; the last 12 versions are stored.
What Happens After Approval
Notifications
Zenable groups notifications into two categories, both configurable under Settings → Notifications in your profile.Governance Activity
Immediate notifications for approval events:Report Mail
An opt-in periodic digest that combines persisted notifications with calculated activity (findings, feedback, and PR/MR reviews) for the reporting period. Choose daily, weekly, or monthly cadence in your profile.Required Permissions
Approvals are fully transparent: anyone withapprovals:read can see every request, every decision, every comment, and who voted which way. There is no per-record permission gating beyond approvals:read.
See Roles and Permissions for which roles include these permissions.
API Reference
Approval Flows
Approval Requests
Decision request body:
decision field accepts approve or reject. The optional comment field (max 280 characters) is recorded with the decision.
Approval Feedback
Feedback request body:
vote field accepts upvote or downvote (mutually exclusive, toggleable). Both fields are optional; you can vote without commenting or comment without voting. Feedback is upserted per user per request — submitting again updates your existing feedback. Comment edits are versioned (last 12 versions retained).
Audit Logging
All approval actions are recorded in the audit log:- Flow created, updated, or archived
- Decision made (approve/reject)
- Request created or resolved
- Feedback submitted or edited
Need help? Contact us at hello@zenable.io