Integrations
Slack Integration
Overview
VerifyWise integrates with Slack workspaces to deliver real-time notifications and alerts directly to your team's channels. The integration supports multiple workspaces, configurable notification routing, and both manual and scheduled notifications.
Our Slack integration uses OAuth 2.0 for secure, scoped access, then routes five notification types to the right channels with full multi-channel support. You get real-time alerts for system events, plus scheduled daily reminders powered by a job queue. It automatically detects and handles invalid or archived channels, and keeps everything locked down with encrypted credential storage and TLS.
Quick start
Prerequisites
Before setting up Slack integration, ensure you have:
Slack Workspace: Admin access to create and configure apps
VerifyWise Account: User account with appropriate permissions
Environment Variables: Required configuration in
.env
Basic setup
Configure environment variables: Add these to Servers/.env
# Encryption Settings
ENCRYPTION_ALGORITHM="aes-256-cbc"
ENCRYPTION_PASSWORD="aaaa bbbb cccc dddd"
# Slack OAuth Configuration
# Get these information from Slack App Settings
SLACK_URL=https://slack.com/oauth/v2/authorize
SLACK_API_URL=https://slack.com/api/oauth.v2.access
SLACK_CLIENT_ID=1234567890.1234567890
SLACK_CLIENT_SECRET=abcdef1234567890abcdef1234567890
SLACK_USER_OAUTH_TOKEN=xoxp-1234567890987654322345678
SLACK_BOT_TOKEN=xoxb-234567wsdfgbn76543345665445678954
# Redis (for job queue)
REDIS_HOST=127.0.0.1
REDIS_PORT=6379And then add these to Clients/.env
# Slack Settings
VITE_SLACK_CLIENT_ID=1234567890.1234567890
VITE_SLACK_URL=https://slack.com/oauth/v2/authorize
VITE_IS_SLACK_VISIBLE=trueNow, create Slack App at https://api.slack.com/apps, configure OAuth scopes (detailed below) and add to workspace from VerifyWise settings.
Quick integration steps
Navigate to Settings → Slack in VerifyWise
Click "Add to Slack" button
Select your workspace and authorize the app
Choose a channel for notifications
Configure notification routing (optional)
Send a test message to verify connectivity
Features
Supported notification types
VerifyWise routes five types of notifications to Slack channels:
Membership and Roles
User additions, removals, role assignments, and team management changes
New user joined, Role changed to Admin
Projects and Organizations
Project creation, modifications, and organization linkages
New project created, Project linked to org
Policy Reminders and Status
Automated policy review reminders and compliance status updates
Policy review due in 7 days, Compliance updated
Evidence and Task Alerts
Evidence uploads, reviews, task assignments, and completions
Evidence uploaded, Task assigned to user
Control or Policy Changes
Updates to key controls or policies that affect compliance and risk posture
Control updated, Policy modified
Channel configuration
Multiple Channels: Connect multiple Slack channels from different workspaces
Flexible Routing: Send different notification types to different channels
Multi-Channel Routing: Route a single notification type to multiple channels
Channel Verification: Test connectivity with "Send Test" button
Auto-Deactivation: Automatically disable webhooks for archived/deleted channels
Scheduled notifications
VerifyWise sends automated notifications based on configured schedules:
Policy Due Soon Reminders: Daily at 9:00 AM UTC
Compliance Status Updates: Based on policy review dates
Background Processing: Queue-based system ensures reliable delivery
User guide
Adding a Slack integration
Step 1: Navigate to Settings
Go to Settings in VerifyWise
Click on Slack tab
Step 2: Authorize workspace
Click the "Add to Slack" button
Select your Slack workspace from the dropdown
Choose the channel where notifications will be sent
Click "Allow" to authorize VerifyWise
Step 3: Verify integration
Integration appears in the table with:
Team name (workspace)
Channel name
Creation date
Active status
Click "Send Test" to verify connectivity
Step 4: Configure notification routing (optional)
Click "Configure" button
For each notification type, select destination channel(s)
Click "Send Test" to verify routing
Click "Save Changes"
Notes:
A notification type can route to multiple channels
A channel can receive multiple notification types
Leaving a notification type empty means no routing for that type
Changes take effect immediately
Managing integrations
View all integrations
Table displays all connected workspaces and channels
Columns: Team Name, Channel, Creation Date, Active status, Actions
Deactivate integration
Integrations automatically deactivate if:
Channel is archived in Slack, is deleted or the bot is removed from channel
Status changes to "No" in Active column
No notifications sent to inactive integrations
Remove integration
Currently requires manual deletion from workspace
Contact system administrator
Slack app setup
Creating a Slack app
Go to https://api.slack.com/apps
Click "Create New App"
Choose "From scratch"
Enter app name: VerifyWise (or your preferred name)
Select workspace: Choose development workspace
Click "Create App"
Configuring OAuth & permissions
Step 1: Add redirect URLs
Navigate to OAuth & Permissions
Scroll to Redirect URLs
Add development URL:
http://localhost:3000/setting/?activeTab=slackAdd production URL:
https://your-domain.com/setting/?activeTab=slackClick "Save URLs"
Step 2: Configure bot token scopes
Scroll to Scopes section
Under Bot Token Scopes, click "Add an OAuth Scope"
Add these scopes:
channels:readchannels:managechat:writechat:write.publicgroups:writegroups:readim:readmpim:read
Step 3: Configure user token scopes
Under User Token Scopes, click "Add an OAuth Scope"
Add these scopes:
channels:readchannels:write.invitesgroups:readgroups:write.inviteschannels:writechat:writeim:readmpim:read
Installing to workspace
Navigate to Install App in left sidebar
Click "Install to Workspace"
Review permissions and click "Allow"
Copy Bot User OAuth Token (starts with
xoxb-)Copy Signing Secret from Basic Information
Retrieving credentials
Client ID & Secret:
Navigate to Basic Information
Scroll to App Credentials
Copy Client ID → Add to
SLACK_CLIENT_IDClick Show next to Client Secret → Copy → Add to
SLACK_CLIENT_SECRET
OAuth URLs:
Authorization URL:
https://slack.com/oauth/v2/authorize→SLACK_URLToken URL:
https://slack.com/api/oauth.v2.access→SLACK_API_URL
Enabling incoming webhooks
Navigate to Incoming Webhooks
Toggle Activate Incoming Webhooks to On
This allows VerifyWise to send formatted messages
Enabling bots
Navigate to App Home
Under Your App's Presence in Slack:
Display Name: VerifyWise (or your preference)
Default Username: @verifywise
Enable Always Show My Bot as Online
Environment configuration
Required environment variables
# Slack OAuth Configuration
SLACK_URL=https://slack.com/oauth/v2/authorize
SLACK_API_URL=https://slack.com/api/oauth.v2.access
SLACK_CLIENT_ID=1234567890.1234567890
SLACK_CLIENT_SECRET=abcdef1234567890abcdef1234567890
# Frontend Configuration
FRONTEND_URL=https://verifywise.com
# Database (PostgreSQL)
DATABASE_URL=postgresql://user:password@localhost:5432/verifywise
# Redis (for job queue)
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
# Encryption (for sensitive data)
ENCRYPTION_KEY=<32-byte-hex-string>Development vs production
Development:
FRONTEND_URL=http://localhost:3000
SLACK_CLIENT_ID=<dev-app-client-id>
SLACK_CLIENT_SECRET=<dev-app-client-secret>Production:
FRONTEND_URL=https://verifywise.com
SLACK_CLIENT_ID=<prod-app-client-id>
SLACK_CLIENT_SECRET=<prod-app-client-secret>Note: Use separate Slack apps for development and production environments, if required.
MLflow Integration
Introduction
The VerifyWise MLflow integration keeps your centralized model inventory in sync with the models that data science teams register inside MLflow. Once connected, VerifyWise periodically ingests model metadata, lifecycle stages, training evidence, and experiment context so governance and compliance teams can review the same source of truth that engineers see in MLflow.
This guide explains how to configure the integration on the Integrations page and how to work with the synchronized data that appears in Model Inventory → MLFlow data.
Why it matters
Connecting VerifyWise to MLflow closes the gap between experimentation and oversight by eliminating manual exports, ensuring every production-relevant version is captured with run metrics, and surfacing governance gaps when a model lacks bias, security, or privacy evidence.
Scheduled syncs also create a defensible audit trail that shows when VerifyWise last contacted MLflow and whether any errors occurred, reducing the operational risk of silent failures or idle BullMQ queues.
Prerequisites
Before configuring the integration you need:
VerifyWise admin access. Only admins can open
/integrations, edit the MLflow card, or start connection tests.MLflow tracking server details. Collect the base URL (e.g.,
https://mlflow.company.com:5000), authentication method, and any credentials. The integration is read-only, but the MLflow account must list/describe models and runs.Background worker availability. Ensure the VerifyWise BullMQ worker process is running in the same environment as the API so scheduled sync jobs execute after you complete a successful connection test.
VerifyWise supports one MLflow configuration per organization. Each tenant stores its own credentials, test history, and sync state so multi-tenant deployments stay isolated.
Configuring MLflow in the Integrations page
Navigate to Integrations → MLflow (or use the shortcut card on the dashboard). Non-admin users will not see this page.
Fill in the Tracking server URL and Request timeout. The timeout controls how long VerifyWise waits before declaring the MLflow API unreachable; increase it for slower on-prem clusters.
Choose an Authentication method:
None– use when the server allows anonymous read access.Basic auth– prompts for username and password fields directly under the selector.API token– prompts for a personal access token or service token field.
If your authentication method requires extras (passwords or tokens), enter them in the newly displayed inputs. Everything you type is stored encrypted and never logged.
Click Test connection. Successful tests immediately update the Connection status chip, record the timestamp in the “Last successful test” card, and enable scheduled syncs. Failures surface the error, keep syncs disabled, and allow you to retry without refreshing the page.
After a successful test, click Save configuration to persist the settings. VerifyWise enforces a “test-before-save” rule to prevent stale credentials from enabling the sync scheduler.
Status cards on the Integrations page
The MLflow card at the top of the page mirrors the compact cards used inside Model Inventory so you get the same at-a-glance health signals:
Connection status shows
Connected,Action required, orError, using VerifyWise chip colors.Last error records the most recent failure reason (timeout, authorization, DNS, etc.). It clears itself after the next successful test or sync.
Last successful test and Last scheduled sync display their timestamps in muted text, with icons in the top-right corner similar to the Model Overview cards.
Upcoming sync indicates when the hourly (or temporarily accelerated) BullMQ job will run next.
Use the Re-run sync button to enqueue an immediate job without waiting for the next cron window. A slim spacer keeps the button close to the cards so the action remains visible.
Scheduled sync behavior
VerifyWise schedules an hourly BullMQ job per organization after the first successful test. (During debugging you can temporarily switch to minute-level intervals, but production defaults back to hourly.). Jobs run inside the dedicated worker process; on production deployments, ensure npm run worker (or its PM2/systemd equivalent) is started alongside the API so queues never sit idle.
The job pulls registered models, versions, and their linked runs via the MLflow REST API, then upserts them into VerifyWise’s mlflow_model_records table with an organization-specific unique key. Duplicate inserts are suppressed, and only material changes update the record timestamps.
Every attempt stamps the “Last scheduled sync” card and writes to the sync history table, even when no models changed, which helps audit teams prove monitoring coverage.
Working with MLFlow data
Once a sync runs, your model governance users can navigate to Model Inventory → MLFlow data to inspect the ingested catalog.
Summary cards and refresh control
Four header cards (“Models”, “Active”, “Staging”, “Experiments”) appear at the top of the tab. They re-use VerifyWise’s dashboard card component, including muted icons and hover states, and summarize what is currently stored for your organization. A Refresh button above the cards re-triggers the API call that fetches data from the VerifyWise backend (not MLflow directly), so it is safe to click multiple times without spamming the remote MLflow server.
Data table
The table lists each synchronized model version with columns for Model Name, Version, Lifecycle Status, Created date, Last Updated date, Description, and Actions. Pagination controls—identical to the Model Risks table—live directly beneath the grid and show “Rows per page”, an inline selector, page counts, and navigation arrows. Click any row to open the detail drawer, which includes:
High-level metadata (version, lifecycle stage, run ID, creation time).
Description text, tags, metrics, and parameters pulled from the MLflow run.
Experiment information (ID, name, artifact location) so you can trace lineage.
Use the action button in the last column to inspect a model in more depth without leaving VerifyWise.
Operational guidance and troubleshooting
Connection succeeds but no data appears Confirm the worker job is running and that the MLflow service account has permission to list registered models. The “Last scheduled sync” card should advance every hour; if it does not, expand the API logs for BullMQ worker errors.
Seeing
Unable to reach the MLflow backendwarnings Increase the Request timeout field, verify network access between VerifyWise and MLflow, and re-test the connection. The error card will capture the latest failure reason so you can share it with infrastructure teams.Manual refresh vs. re-run sync: The Refresh button on the MLFlow data tab only re-queries VerifyWise’s database; use Re-run sync on the Integrations page when you need VerifyWise to pull fresh data from MLflow immediately.
Last updated
Was this helpful?