How to Configure Twingate Access Request Notifications in Slack with Approve and Reject Actions
Overview
This guide walks you through setting up a Slack Workflow Builder workflow that receives Twingate access request notifications via webhook and posts them to an admin channel — complete with Approve and Reject buttons that link directly to your Twingate Admin Console.
ℹ️ How It Works 1. Twingate sends a JSON payload to a Slack Workflow Builder webhook URL 2. Workflow Builder maps the payload fields to variables 3. A message is posted to your chosen admin channel 4. Admins click Approve or Reject — buttons open the Twingate Admin Console directly |
Prerequisites
Slack Plan | Pro, Business+, or Enterprise Grid (Workflow Builder not on Free plan) |
Slack Permission | Member or above; Workspace Owner may be needed to publish |
Twingate Role | Admin access to the Twingate Admin Console |
Browser | Chrome or Edge recommended for Workflow Builder |
Create a New Workflow in Slack
1. Tools → Workflow Builder: Open Slack and click
2. Create (top-right corner): Click
3. TG Demo Access Requests: Enter a workflow name, e.g.
4. "From a webhook" as the trigger and click Next: Select
Set Up Webhook Variables
Click Set Up Variables and add all 10 variables exactly as shown below. These must match the JSON keys that Twingate sends — spelling and case must be identical.
Variable Name | Description |
user_url | Profile URL of the Twingate user making the request |
version | Payload schema version sent by Twingate |
requested_at | Timestamp of when the access request was made |
reason | Reason provided by the user for the access request |
type | Type of access request event |
resource_url | URL of the Twingate resource being requested |
resource_name | Display name of the Twingate resource |
user_name | Display name of the user making the request |
request_id | Unique ID of the access request |
request_url | Admin Console URL for this request (used in buttons) |
5. Save Click
6. Webhook URL that appears — you will paste this into Twingate in Step 4
Add a 'Send a Message' Step
7. "Send a message to a channel "Click "Add Step" →
8. Select a channel, choose your admin channel (e.g. #twingate-access-requests) In
9. "Insert a variable" (bottom-right) to insert your variables In the message editor, click
Build your message using the template below:
🚨 A new access request has come in from {user_name} ! {Time when workflow started}
• version: {version} • type: {type} • request_id: {request_id} • request_url: {request_url} • user_url: {user_url} • resource_name: {resource_name} • reason: {reason} • requested_at: {requested_at} |
10. Save to save this step: Click
Add Approve & Reject Buttons
Still inside the message step, add interactive buttons so admins can act directly from Slack.
Button | Label | Color | Link (Open link behavior) |
✅ Approve | Approve | Green | {request_url}&access_request_approve=true |
❌ Reject | Reject | Red | {request_url}&access_request_approve=false |
💡 How the buttons work The {request_url} variable is populated by Twingate with a direct link to that specific access request in your Admin Console. The query string appended to it (&access_request_approve=true) tells the Admin Console whether the admin clicked Approve or Reject. |
11. "Add Another Button" to add the Reject button Click
12. Done when both buttons are configured Click
Publish the Workflow
13. Publish (top-right of Workflow Builder) Click
14. Active Confirm the workflow status shows
15. Webhook URL ready — you will paste it into Twingate next Keep the
Configure Twingate to Send Notifications
16. Twingate Admin Console at https://<your-network>.twingate.com Log in to your
17. Settings → Notifications (or Integrations) Go to
18. Add Notification → select Webhook Click
19. Webhook URL from Step 2 Paste the
20. Content-Type to application/json Set
Twingate will send this exact JSON payload — ensure these keys match your Workflow Builder variables:
{ "user_url": "Example text", "version": "Example text", "requested_at": "Example text", "reason": "Example text", "type": "Example text", "resource_url": "Example text", "resource_name": "Example text", "user_name": "Example text", "request_id": "Example text", "request_url": "Example text" } |
21. Save in Twingate: Click
Test the Integration
22. Test Notification In Twingate Notifications settings, click
23. Check your admin Slack channel — the message with Approve/Reject buttons should appear within 30 seconds
24. Verify all variables display correctly in the message
🧪 Manual Test via cURL (if Twingate test button unavailable) curl -X POST \ -H "Content-Type: application/json" \ -d '{ "user_url": "https://example.twingate.com/users/abc", "version": "1", "requested_at": "2026-06-06T10:00:00Z", "reason": "Need access for project", "type": "access_request", "resource_url": "https://example.twingate.com/resources/xyz", "resource_name": "Internal Dashboard", "user_name": "John Smith", "request_id": "req_12345", "request_url": "https://example.twingate.com/requests/req_12345" }' \ YOUR_WORKFLOW_BUILDER_WEBHOOK_URL Expected response: HTTP 200 OK |
Troubleshooting
⚠️ Invalid Payload Error Cause: Variable name mismatch between Workflow Builder and Twingate JSON keys Fix: Open Workflow Builder → edit the webhook trigger → verify all variable names match the JSON keys exactly (case-sensitive). E.g. user_name ≠ user_Name |
❓ No Message Appearing in Slack 1. Confirm the workflow is Published (not in Draft state) 2. Verify the full webhook URL is correctly pasted in Twingate (not truncated) 3. Ensure the bot has access to the channel — invite it: /invite @Workflow Builder 4. Check Workflow Builder run history: open workflow → click Activity |
✅ Quick Checklist □ Workflow Builder workflow created with 'From a webhook' trigger □ All 10 variables added with exact spelling and lowercase names □ Workflow is Published (Active status) □ Webhook URL copied and pasted into Twingate Notifications □ Content-Type set to application/json in Twingate □ Message template built using Insert a Variable □ Approve button link: {request_url}&access_request_approve=true □ Reject button link: {request_url}&access_request_approve=false □ Test notification sent and message appears in Slack channel |
FAQ
1) How do I integrate Twingate access requests with Slack?
Create a Slack Workflow Builder workflow using a webhook trigger, map Twingate JSON variables, and configure Twingate notifications to send requests to the Slack webhook URL.
2) Can administrators approve Twingate access requests directly from Slack?
Yes. Slack messages can include Approve and Reject buttons that open the corresponding access request directly in the Twingate Admin Console.
3) Why am I getting an "Invalid Payload" error in Slack Workflow Builder?
The most common cause is a mismatch between Slack Workflow Builder variable names and the JSON keys sent by Twingate. Variable names must match exactly, including capitalization.
4) What Slack plan is required for Twingate Workflow Builder integrations?
Slack Workflow Builder webhook triggers require a Slack Pro, Business+, or Enterprise Grid subscription. The feature is not available on the Slack Free plan.
5) How do I troubleshoot missing Twingate notifications in Slack?
Verify the workflow is published, confirm the webhook URL is correctly configured in Twingate, ensure the Workflow Builder bot has channel access, and review workflow activity logs.
