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

# Slack API

> Manage Slack connections, live and retained history, search, files, and durable message and workspace operations

<Note>Slack is in beta.</Note>

Create a Slack app for an Inkbox identity in a workspace configured by your organization. Search retained messages across the identity, or select a workspace connection for live operations and archive management. Start with the [Slack guide](/docs/capabilities/slack) for installation and runtime behavior.

API base URL:

```text theme={null}
https://inkbox.ai/api/v1/slack
```

Authenticated requests use your [API key](/docs/api-keys):

```text theme={null}
X-API-Key: YOUR_API_KEY
```

## Access

| Operation | Who can call it |
| :- | :- |
| List connections; live and retained reads; backfills; messages, files, reactions, pins, and other operations | An organization admin API key, the Inkbox Console, or a claimed agent-scoped API key for the owning identity |
| List saved provisioning-workspace metadata; save workspace credentials | Any organization member in the Console, an organization admin API key, or a claimed agent-scoped API key, within their organization |
| Prepare the app; start installation | Any organization member in the Console, an organization admin API key, or a claimed agent-scoped API key for the owning identity |
| Disconnect; change archive settings or delete an archive | An organization admin API key or the Inkbox Console |

Claimed agent keys can reuse their organization's saved workspaces, but can prepare, install, and use apps only for their own identity. Workspace metadata never includes saved credentials. Connections do not grant access outside the owning identity. Workspace approval, channel membership, granted Slack permissions, and Slack rate limits apply to every live operation. Unclaimed agent keys cannot use these endpoints.

Retained reads also check current conversation access. Slack Connect uses the selected connection's permissions. Slack does not apply email or phone contact allow/block rules to its conversations.

## Endpoints

All paths below are relative to the API base URL.

| Method | Path | Reference |
| :- | :- | :- |
| GET | `/search` | [Search across workspaces](/docs/api/slack/archive#search-across-workspaces) |
| GET | `/provisioning-workspaces` | [List saved workspaces](/docs/api/slack/connections#list-saved-provisioning-workspaces) |
| POST | `/provisioning-workspaces` | [Save workspace credentials](/docs/api/slack/connections#save-a-provisioning-workspace) |
| GET | `/connections` | [List connections](/docs/api/slack/connections#list-connections) |
| POST | `/applications/setup` | [Prepare an identity app](/docs/api/slack/connections#prepare-the-app) |
| POST | `/installations` | [Start browser installation](/docs/api/slack/connections#start-browser-installation) |
| POST | `/connections/{connection_id}/disconnect` | [Disconnect](/docs/api/slack/connections#disconnect-a-workspace) |
| GET | `/connections/{connection_id}/conversations` | [List conversations](/docs/api/slack/conversations#list-conversations) |
| POST | `/connections/{connection_id}/conversations` | [Open a DM](/docs/api/slack/conversations#open-a-direct-message) |
| GET | `/connections/{connection_id}/conversations/{conversation_id}` | [Get conversation](/docs/api/slack/conversations#get-conversation) |
| GET | `/connections/{connection_id}/conversations/{conversation_id}/messages` | [Read messages or replies](/docs/api/slack/messages#list-messages) |
| POST | `/connections/{connection_id}/messages` | [Send message](/docs/api/slack/messages#send-message) |
| GET | `/connections/{connection_id}/actions/by-key` | [Recover action by key](/docs/api/slack/messages#recover-action-by-key) |
| GET | `/connections/{connection_id}/actions/{action_id}` | [Read action status](/docs/api/slack/messages#get-action) |
| GET | `/connections/{connection_id}/files/{file_id}` | [Read file metadata](/docs/api/slack/files#get-file-metadata) |
| GET | `/connections/{connection_id}/files/{file_id}/content` | [Download file](/docs/api/slack/files#download-file-content) |
| POST | `/connections/{connection_id}/files` | [Upload file](/docs/api/slack/files#upload-a-file) |
| GET | `/connections/{connection_id}/capabilities` | [Capabilities](/docs/api/slack/users#inspect-capabilities) |
| GET | `/connections/{connection_id}/users` | [List users](/docs/api/slack/users#list-users) |
| GET | `/connections/{connection_id}/users/{user_id}` | [Get user](/docs/api/slack/users#get-user) |
| GET | `/connections/{connection_id}/conversations/{conversation_id}/members` | [List members](/docs/api/slack/users#list-conversation-members) |
| GET | `/connections/{connection_id}/conversations/{conversation_id}/messages/{message_ts}` | [Get message](/docs/api/slack/messages#get-one-message) |
| GET | `/connections/{connection_id}/conversations/{conversation_id}/messages/{message_ts}/context` | [Read context](/docs/api/slack/messages#read-message-context) |
| GET | `/connections/{connection_id}/conversations/{conversation_id}/messages/{message_ts}/permalink` | [Get message link](/docs/api/slack/messages#get-a-message-link) |
| PATCH | `/connections/{connection_id}/conversations/{conversation_id}/messages/{message_ts}` | [Edit message](/docs/api/slack/operations#edit-or-delete-a-message) |
| DELETE | `/connections/{connection_id}/conversations/{conversation_id}/messages/{message_ts}` | [Delete message](/docs/api/slack/operations#edit-or-delete-a-message) |
| GET | `/connections/{connection_id}/conversations/{conversation_id}/messages/{message_ts}/reactions` | [Read reactions](/docs/api/slack/operations#read-reactions) |
| POST | `/connections/{connection_id}/conversations/{conversation_id}/messages/{message_ts}/reactions` | [Add reaction](/docs/api/slack/operations#add-or-remove-a-reaction) |
| DELETE | `/connections/{connection_id}/conversations/{conversation_id}/messages/{message_ts}/reactions/{name}` | [Remove reaction](/docs/api/slack/operations#add-or-remove-a-reaction) |
| GET | `/connections/{connection_id}/conversations/{conversation_id}/pins` | [Read pins](/docs/api/slack/operations#read-pins) |
| POST | `/connections/{connection_id}/conversations/{conversation_id}/pins` | [Pin message](/docs/api/slack/operations#pin-or-unpin-a-message) |
| DELETE | `/connections/{connection_id}/conversations/{conversation_id}/pins/{message_ts}` | [Unpin message](/docs/api/slack/operations#pin-or-unpin-a-message) |
| POST | `/connections/{connection_id}/conversations/{conversation_id}/join` | [Join conversation](/docs/api/slack/operations#join-or-leave-a-conversation) |
| POST | `/connections/{connection_id}/conversations/{conversation_id}/leave` | [Leave conversation](/docs/api/slack/operations#join-or-leave-a-conversation) |
| POST | `/connections/{connection_id}/conversations/{conversation_id}/processing-status` | [Set processing status](/docs/api/slack/operations#set-native-processing-status) |
| GET | `/connections/{connection_id}/operations/{operation_id}` | [Get operation](/docs/api/slack/operations#get-operation) |
| GET | `/connections/{connection_id}/archive/settings` | [Read retention settings](/docs/api/slack/archive#get-retention-settings) |
| PATCH | `/connections/{connection_id}/archive/settings` | [Set message retention](/docs/api/slack/archive#update-retention-settings) |
| GET | `/connections/{connection_id}/archive/messages` | [Read retained messages](/docs/api/slack/archive#list-retained-messages) |
| GET | `/connections/{connection_id}/archive/search` | [Search one workspace](/docs/api/slack/archive#search-retained-messages) |
| POST | `/connections/{connection_id}/archive/backfill` | [Import history](/docs/api/slack/archive#import-accessible-history) |
| GET | `/connections/{connection_id}/archive/coverage` | [Inspect coverage](/docs/api/slack/archive#inspect-coverage) |
| DELETE | `/connections/{connection_id}/archive` | [Delete archive](/docs/api/slack/archive#delete-archive) |

Register [Slack events](/docs/api/slack/webhooks) through the shared [Webhook Subscriptions API](/docs/api/webhooks/subscriptions), using `agent_identity_id` as owner.

## Common errors and limits

| Status | Meaning |
| :- | :- |
| `401` | Authentication is missing or invalid. |
| `403` | Your key cannot perform the operation, or the agent lacks conversation access. |
| `404` | The identity, connection, action, conversation, or file is unavailable to the caller. |
| `409` | State changed, reauthorization is required, an idempotency key conflicts, archive cleanup is unfinished for a backfill, or installation state prevents the request. |
| `410` | An installation link is expired, consumed, revoked, or otherwise unavailable. |
| `413` | The request body or downloaded file exceeds its size limit. |
| `422` | The input is invalid or an unsupported file type was requested. |
| `429` | A Slack request, installation attempt, or related request was rate-limited. Honor `Retry-After` when present. |
| `502` | Slack could not complete a live request. Inspect the returned error code. |
| `503` | Installation or a live operation is temporarily unavailable. Honor `Retry-After` when present. |

An incompatible reuse of an idempotency key returns `409` with `detail.error: "idempotency_key_reused"`. The SDKs expose the corresponding typed idempotency-conflict error. Do not retry it as a transient failure.

Read one page at a time. The API does not promise a fixed requests-per-minute allowance or complete workspace history. Conversation objects and message objects contain the supported fields available from Slack, not a fixed set of populated properties.

There are no Slack delivery/read receipts or semantic-search endpoints. Retained search covers captured message text, not every message or file in the workspace. Native processing status depends on Slack app and workspace support.


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