> ## Documentation Index
> Fetch the complete documentation index at: https://docs.argalabs.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Slack

> Slack Scenario seeding parameters, nested fields, and examples

Use `slack` in `twins` and put this configuration under `seed_config.slack`.

Slack workspace with channels, users, messages, and workspace-level settings.

## Example seed

This is the complete Scenario request body for [creating a Scenario](https://docs.argalabs.com/api-reference/post-create-a-scenario.md). You can also import it with `arga test-runner scenarios import --file scenario.json`.

```json theme={null}
{
  "name": "Slack eval fixture",
  "twins": [
    "slack"
  ],
  "seed_config": {
    "slack": {
      "channels": [
        {
          "name": "channel-name",
          "is_private": false,
          "messages": [
            {
              "text": "message text",
              "user": "username",
              "pinned": false,
              "metadata": {
                "entities": []
              },
              "reactions": [
                {
                  "name": "thumbsup",
                  "users": [
                    "another.username"
                  ]
                }
              ],
              "replies": [
                {
                  "text": "thread reply",
                  "user": "another.username",
                  "reply_broadcast": false
                }
              ]
            }
          ]
        }
      ],
      "direct_messages": [
        {
          "users": [
            "slack-twin-bot",
            "username"
          ],
          "messages": [
            {
              "text": "direct message text",
              "user": "username"
            }
          ]
        }
      ],
      "users": [
        {
          "name": "username",
          "real_name": "User Name",
          "email": "user@example.com"
        }
      ],
      "canvases": [
        {
          "title": "Runbook",
          "channel": "channel-name",
          "markdown": "# Runbook\nSeeded canvas content."
        }
      ],
      "oauth_bot_scopes": [
        "chat:write",
        "channels:read",
        "channels:history",
        "users:read"
      ],
      "oauth_user_scopes": [
        "search:read",
        "channels:read",
        "channels:history"
      ],
      "tokens": [
        {
          "token": "xoxb-custom-token",
          "user_id": "UTWINBOT",
          "scopes": [
            "chat:write",
            "channels:read",
            "files:write",
            "files:read"
          ],
          "is_bot": true
        }
      ],
      "file_uploads_enabled": true,
      "max_storage_bytes": 5368709120,
      "storage_used_bytes": 0,
      "event_delivery": {
        "auto_dispatch": true,
        "use_wall_clock_signatures": true
      },
      "rate_limiting_enabled": false,
      "rate_limits": {
        "conversations.history": {
          "window_seconds": 60,
          "max_requests": 50,
          "retry_after_seconds": 30
        }
      }
    }
  }
}
```

## Parameters

The following fields belong directly inside `seed_config.slack`. Required nested fields are marked in their tables. Provider-native objects can contain service-specific fields beyond the representative record shapes below.

| Parameter | Type | Description |
| - | - | - |
| `channels` | `object[]` | Channels fixtures in provider-native format. |
| `direct_messages` | `object[]` | One-to-one or group conversations with explicit participants. |
| `users` | `object[]` | Users fixtures in provider-native format. |
| `canvases` | `object[]` | Canvas documents and their conversation links. |
| `oauth_bot_scopes` | `string[]` | OAuth scopes granted to bot credentials after seeding. |
| `oauth_user_scopes` | `string[]` | OAuth scopes granted to user credentials after seeding. |
| `tokens` | `object[]` | Test credentials, identity assignments, and permission scopes. |
| `file_uploads_enabled` | `boolean` | Allow file uploads. |
| `max_storage_bytes` | `integer` | Maximum storage capacity in bytes. |
| `storage_used_bytes` | `integer` | Starting consumed storage in bytes. |
| `subscriptions` | `object[]` | Event subscriptions. |
| `link_domains` | `string[]` | Domains registered for link events. |
| `event_delivery` | `object` | Event delivery ordering, batching, timing, and callback settings. |
| `rate_limiting_enabled` | `boolean` | Enable request rate limiting. |
| `rate_limits` | `object` | Request limits keyed by API method or endpoint. |

## Seeding behavior

Use nested `replies` for threads. Imported timestamps use `source_ts`; flat `thread_ts` values reference those source timestamps. Each DM `users` list includes the opener and every counterpart (2-9 distinct aliases). Message/reaction authors must be participants. Explicit token scopes are preserved after seeding. Supply event callback URLs only when you have a recipient endpoint for the fixture.

## Resource fields

These tables describe the record shapes used by the example. Keep native field names and casing. Map keys such as property names, IDs, and metadata keys are supplied by your fixture.

### `channels[]`

| Parameter | Type | Description |
| - | - | - |
| `name` | `string` | Human-readable name. |
| `is_private` | `boolean` | Enable or set is private behavior. |
| `messages` | `object[]` | Messages to create in the twin. |

### `channels[].messages[]`

| Parameter | Type | Description |
| - | - | - |
| `text` | `string` | Text content. |
| `user` | `string` | User. |
| `pinned` | `boolean` | Enable or set pinned behavior. |
| `metadata` | `object` | Metadata. |
| `reactions` | `object[]` | Reactions fixtures in provider-native format. |
| `replies` | `object[]` | Replies fixtures in provider-native format. |

### `channels[].messages[].reactions[]`

| Parameter | Type | Description |
| - | - | - |
| `name` | `string` | Human-readable name. |
| `users` | `string[]` | Users fixtures in provider-native format. |

### `channels[].messages[].replies[]`

| Parameter | Type | Description |
| - | - | - |
| `text` | `string` | Text content. |
| `user` | `string` | User. |
| `reply_broadcast` | `boolean` | Enable or set reply broadcast behavior. |

### `direct_messages[]`

| Parameter | Type | Description |
| - | - | - |
| `users` | `string[]` | Users fixtures in provider-native format. |
| `messages` | `object[]` | Messages to create in the twin. |

### `direct_messages[].messages[]`

| Parameter | Type | Description |
| - | - | - |
| `text` | `string` | Text content. |
| `user` | `string` | User. |

### `users[]`

| Parameter | Type | Description |
| - | - | - |
| `name` | `string` | Human-readable name. |
| `real_name` | `string` | Real name. |
| `email` | `string` | Main account email address. |

### `canvases[]`

| Parameter | Type | Description |
| - | - | - |
| `title` | `string` | Human-readable name. |
| `channel` | `string` | Channel. |
| `markdown` | `string` | Markdown. |

### `tokens[]`

| Parameter | Type | Description |
| - | - | - |
| `token` | `string` | Token. |
| `user_id` | `string` | User id. |
| `scopes` | `string[]` | Scopes fixtures in provider-native format. |
| `is_bot` | `boolean` | Enable or set is bot behavior. |

## API coverage and limitations

**Twin name:** `slack`

**Supports**

* Slack Web API methods for conversations, channels, messages, scheduled messages, users, reactions, pins, bookmarks, do-not-disturb, modal views, direct messages, and files.
* Block Kit messages on `chat.postMessage`: requests with a non-empty `blocks` array are accepted even when fallback `text` is blank or whitespace, and the submitted `blocks` are returned in the response and persisted in conversation history. Posts with both empty `text` and empty `blocks` still return `no_text`.
* Auth methods including `api.test`, `auth.test`, `auth.revoke`, and `auth.teams.list`.
* OAuth 2.0 authorization code grant through `/oauth/v2/authorize` and `/api/oauth.v2.access`, plus MCP OAuth aliases at `/oauth/v2_user/authorize` and `/api/oauth.v2.user.access`.
* Bot, user, and enterprise-style tokens, method-level OAuth scope enforcement, configurable token scopes, and missing-scope errors.
* File uploads, external upload completion, downloadable files, file-share events, workspace tier constraints, storage quotas, rate-limit simulation, event delivery, replay, and admin inspection.
* Slack CLI app management surface including manifest validate/create/update/export, app status, developer install/uninstall, app delete, connections open, hosted package upload placeholders, hosted environment variables (add/list/remove), and Slack CLI secondary API families covering activities, auth tickets and token rotation, app approvals, external auth, datastores, workflow triggers, function permissions, collaborators, icons, certified installs, and developer sandboxes. Point the Slack CLI at the twin by setting `SLACK_API_URL` to the twin's `/api/` base.
* Slack MCP Streamable HTTP endpoint at `/mcp` with JSON-RPC 2.0 `initialize`, `tools/list`, and `tools/call`, OAuth protected resource metadata at `/.well-known/oauth-protected-resource/mcp`, authorization server metadata at `/.well-known/oauth-authorization-server`, and Slack-shaped MCP tools (`slack_search_messages`, `slack_search_messages_and_files`, `slack_search_public_and_private`, `slack_search_public`, `slack_search_files`, `slack_search_users`, `slack_search_channels`, `slack_list_channels`, `slack_read_channel`, `slack_send_message`, `slack_schedule_message`, `slack_send_message_draft`, `slack_read_thread`, `slack_list_users`, `slack_get_user`, `slack_read_user_profile`, `slack_create_canvas`, `slack_update_canvas`, `slack_read_canvas`) that share state with the Web API surface.

**Known limitations**

* Channels start empty unless seeded or created through `conversations.create`.
* File upload limits and workspace features are controlled by the twin's configured tier and constraints, not by a live Slack workspace.
* The REST, OAuth, Slack CLI, and Slack MCP surfaces are the fidelity targets; websocket/Socket Mode behavior is not described as primary support here.
* Hosted package upload endpoints (`apps.hosted.generatePresignedPost`, `apps.hosted.upload`) accept the CLI lifecycle but do not execute hosted runtimes.

**MCP tools:** `get_twin_catalog`, `provision_twins`, `start_url_validation`, `get_validation_results`.

See [Scenario seeding](https://docs.argalabs.com/twins/seeding.md) for saving, provisioning, and resetting fixtures.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.