---
title: "Get Slack Install"
method: GET
path: "/api/v1/recipients/slack"
tags: ["recipients"]
---

# Get Slack Install

`GET /api/v1/recipients/slack`

Whether this company has a live Slack install. Readable by any member.

Not admin-gated, unlike the two writes below: a member whose notifications
may start arriving in Slack has a legitimate interest in knowing whether
the company is connected, and the answer is a workspace name and a date —
`SlackInstallRead` has no field the bot token could occupy.

## Response `200`

Successful Response

- SlackInstallRead — Whether this company has a live Slack install, and which workspace. **The bot token has no representation here, in any form — not encrypted, not truncated, not as a boolean "has token".** This model is what the settings page renders, so it is the one place a token could leak into a browser, and the guard is that the field does not exist. A test asserts the field set is exactly these four names, so adding a fifth is a deliberate act rather than an accident. `team_name` and `installed_at` are populated only when `connected` is True. A revoked install reads as `connected=False` with both fields empty: the row survives revocation (so the identity cache stays warm for a reconnect), but the UI must show "not connected", not a workspace name with an invisible asterisk. `needs_reinstall` is derived from `slack_workspace.scopes` — a bool, never the scopes themselves, which is why it is safe to widen the field set for: it carries no token material. True only for a company that IS connected but whose install predates `INBOUND_SCOPES` (see that constant's docstring in `application/operations/install.py`); a company with no install at all reads `needs_reinstall=False`, because "connect" is already the call to action there and a reinstall prompt on top of it would be a second one for the same button.
  - `connected` boolean, required
  - `team_name` string, nullable
  - `installed_at` string, date-time, nullable
  - `needs_reinstall` boolean

## Changes

> 36 revisions in range; 1 not diffed.

- **2026-09-14** `50c8322fa039` — 1 info
  - added the optional property `needs_reinstall` to the response with the `200` status
- **2026-09-13** `2fbe8fef9481` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/netter/apis/dmi-backend/changes/api/v1/recipients/slack/get.md)

---

[API](https://skmtc.dev/netter/apis/dmi-backend.md) · [All operations](https://skmtc.dev/netter/apis/dmi-backend/llms.txt) · [OpenAPI document](https://skmtc.dev/netter/apis/dmi-backend/revisions/45183c028c46?raw)
