> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.withverifa.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.withverifa.com/_mcp/server.

# Slack

> Send verification, review-queue, and screening alerts into Slack — with per-event channel routing, PII controls, and slash commands.

Connect a Slack workspace and Verifa posts Block Kit cards into the channels
you pick: a new review case, an escalation, a declined verification, a
sanctions hit. Every card carries an **Open in Verifa** deep link to the
matching record.

The integration is **notification-only by design**. There are no approve or
reject buttons on the cards — compliance decisions happen in the dashboard so
every action lands in the audit trail with a named reviewer behind it.

> **Note**
>
> Integrations require a **Professional** plan or above. All features are
> unlocked in sandbox regardless of plan, so you can wire up and test the flow
> before upgrading.

## Connect a workspace

1. In the dashboard, go to **Integrations** and find the Slack card.
2. Click **Connect**. You'll be sent to Slack to approve the app.
3. Pick the workspace and the channel Verifa should post to, then **Allow**.
4. You land back on the Integrations page with the workspace connected.

One Slack workspace connects per organization, and it covers both
environments — sandbox routing is a configuration option rather than a second
install (see [Sandbox routing](#sandbox-routing)).

Reconnecting the same workspace updates the existing connection instead of
creating a duplicate.

### Private channels

The OAuth install grants access to public channels automatically. To post
into a **private** channel, invite the bot to it first:

```
/invite @Verifa
```

Without that, delivery fails with a `not_in_channel` error and the connection
is flagged on the Integrations page.

## Events

Pick which events post to Slack from the connection's **Events** panel. Eight
are available:

| Event                     | Fires when                                               |
| ------------------------- | -------------------------------------------------------- |
| `case.created`            | A review case opens and needs a reviewer                 |
| `case.escalated`          | A case is escalated to a higher reviewer                 |
| `case.sla_reminder`       | A case has been sitting open past your reminder interval |
| `session.declined`        | A verification is declined, with the rejection reason    |
| `session.approved`        | A verification passes                                    |
| `session.requires-review` | A session needs manual review (session-level)            |
| `check.matched`           | An AML or sanctions screening hit                        |
| `screening.completed`     | A screening finishes                                     |

New connections start subscribed to `case.created`, `case.escalated`,
`case.sla_reminder`, `session.declined`, and `check.matched`.

> **Tip**
>
> `session.requires-review` is off by default because every review spawns a
> case — leaving both it and `case.created` on posts two cards for the same
> event.

## Channel routing

By default everything goes to the channel you chose during install. You can
override that per event type — send screening hits to `#compliance` and the
review queue to `#ops`, for example.

Verifa resolves the target channel in this order:

1. A **per-event routing rule** matching the event type. Rules support exact
   matches (`check.matched`) and prefix wildcards (`case.*`).
2. The **sandbox channel**, when the event came from sandbox and sandbox
   routing is enabled.
3. The **default routing channel**.
4. The channel picked during install.

### Sandbox routing

Turn on sandbox routing and set a separate channel to keep test traffic out of
the channel your team actually watches. With it off, sandbox events post to the
same channels as live ones — useful while you're setting the integration up,
noisy afterwards.

## PII controls

**Slack cards omit personal data by default.** Names, dates of birth, document
numbers, and addresses are stripped before the message is posted; you get IDs,
references, statuses, and reasons.

Shared Slack channels tend to have a much broader audience than your Verifa
dashboard, so this default is deliberate. If your compliance posture allows it,
you can opt a connection in to including PII from the connection settings —
but the deep link back into Verifa is usually the better answer.

## Open-case reminders

With `case.sla_reminder` enabled, Verifa re-pings the channel about cases that
are still open. Set the cadence per connection — **1, 4, 8, 12, or 24 hours**,
defaulting to 24. Each open case triggers one reminder per interval until it's
resolved.

Set the interval to **Disabled** to stop reminders without unsubscribing from other
events.

## Slash commands

The app installs a `/verifa` command, available to anyone in the workspace:

| Command                         | What it does                           |
| ------------------------------- | -------------------------------------- |
| `/verifa help`                  | List the available commands            |
| `/verifa status <session_id>`   | Show a session's current status        |
| `/verifa lookup <external_ref>` | Find an identity by your own reference |
| `/verifa queue`                 | Show open review cases with links      |

Responses are **ephemeral** — only the person who ran the command sees them,
so a lookup in a busy channel doesn't broadcast results to everyone.

Commands resolve to the organization that installed the app in that workspace,
and return results for that install's environment.

## When something breaks

Verifa watches delivery failures and reacts based on what went wrong:

* **Configuration problems** — the bot was removed from the channel, the
  channel was archived or deleted, a scope is missing. The connection is
  flagged with a plain-language fix on the Integrations page, and everyone
  with the Admin or Developer role gets a notification.
* **Rate limits and transient errors** — retried automatically, honoring
  Slack's `Retry-After`. No alert; nothing for you to do.
* **Revoked or invalid credentials** — the connection is archived and the org
  is notified that Slack was disconnected. Reconnect from the Integrations
  page to resume.

If a workspace admin removes the Verifa app from Slack directly, Verifa
receives the uninstall event, archives the connection, and notifies your org —
so the dashboard never shows a connection that's silently dead.

## Testing the connection

The connection row has a **Test** button that posts a sample card to your
configured channel. Use it after changing channel routing or re-inviting the
bot to confirm the path works end to end.