Approvals
Approvals provide human-in-the-loop oversight for AI agent actions. When a policy rule requires approval, Relynt sends a structured message to your Slack channel where a team member can approve or deny the action.
How approvals work
- An agent calls the Relynt gateway
- The policy engine evaluates the request and determines approval is required
- Relynt creates an approval request and posts it to your configured Slack channel
- The gateway returns
decision: "pending_approval"with anapproval_id - A team member clicks Approve or Deny in Slack
- Relynt records the decision, executes the connector (if approved), and creates a final receipt
Slack message format
Approval messages include everything a reviewer needs to make a decision:
- Agent ID — which agent is requesting the action
- Action — what the agent wants to do (e.g.,
update_deal) - Resource — the target (e.g.,
crm:deal:123) - Risk summary — the policy-assigned risk level and reason
- Diff-style fields — before/after values when available (e.g., amount change, stage transition)
- Approve / Deny buttons — interactive Slack buttons for the decision
Diff-style fields make it easy for reviewers to see exactly what will change, reducing the time needed to make a decision.
Setting up Slack approvals
1. Configure your Slack channel
In the dashboard, go to Settings → Onboarding and configure your organization’s Slack channel for approvals. You’ll need:
- A Slack workspace with the Relynt app installed
- A channel where approval messages should be posted
- The Slack signing secret for verification
2. Create approval-required policies
Add policy rules with decision: "require_approval" or conditions that escalate to approval (like require_approval_if_stage):
{
"action": "update_deal",
"resource_pattern": "crm:deal:*",
"decision": "require_approval",
"risk_level": "high",
"conditions": {
"require_approval_if_stage": ["closed_won", "closed_lost"]
}
}3. Handle pending responses
When your agent receives pending_approval, it should:
- Wait and poll — periodically check the receipt status
- Use a fallback — proceed with an alternative action
- Queue for later — store the request and retry after approval
Security
Approvals include several security measures:
- Slack signature verification — every callback is verified using the Slack signing secret to prevent spoofing
- Replay prevention — each approval can only be decided once; duplicate button clicks are rejected
- Pending-only decisions — only approvals in
pendingstate can be approved or denied - Approver identity — the Slack user who clicked the button is recorded in the receipt
Only approvals in pending state can be decided. Once an approval is approved or denied, the buttons are disabled and further clicks have no effect.
Receipt trail
Every approval flow produces two receipts:
| Receipt | Decision | When |
|---|---|---|
| Initial | pending_approval | When the Slack message is sent |
| Final | allow or deny | When the approver clicks a button |
Both receipts share the same approval_id and can be correlated in the receipts dashboard.