---
title: "List Enrollments"
method: GET
path: "/slack/enrollments"
tags: ["slack-channel-enrollments"]
---

# List Enrollments

`GET /slack/enrollments`

## Response `200`

Successful Response

- ListSlackChannelEnrollmentsResponse — List of active enrollments for an organization.
  - `enrollments` SlackChannelEnrollmentResponse[], required
    - `id` string, required
    - `organization_id` string, required
    - `slack_channel_id` string, required
    - `slack_channel_name` string, required
    - `mode` 'MANUAL' | 'AUTO' | 'CUSTOM' | 'READ_ONLY', required — How Traversal is wired into a chat channel. Stored as ``slack_channel_enrollments.mode``. A channel with no enrollment row is implicitly ``MANUAL``; storing an explicit ``MANUAL`` row lets the channel carry per-channel state (like ``custom_instruction``) without enabling auto-triggers. Removing a channel from Channel Management entirely is a separate act (archiving the enrollment), not a mode. ``READ_ONLY`` is the one mode that suppresses *outbound* behavior rather than selecting a flavor of it: Traversal keeps ingesting and storing every message, and answers every interactive surface with a fixed notice instead of doing work. It is only offered while its organization's gate is on -- see ``engagement_policy``. Existing ``READ_ONLY`` channels keep the mode when that gate is turned back off, so nothing starts talking again behind a customer's back.
    - `custom_instruction` string, nullable, required
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
    - `custom_instruction_last_edited_at` string, date-time, nullable
    - `custom_instruction_last_edited_by` string, nullable

---

[API](https://skmtc.net/traversal/apis/fastapi.md) · [All operations](https://skmtc.net/traversal/apis/fastapi/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/traversal/fastapi/revisions/2134ebffd1ef/schema)
