---
title: "Authorize Slack integration"
method: GET
path: "/v1/integrations/slack/oauth/authorize"
tags: ["integrations"]
---

# Authorize Slack integration

`GET /v1/integrations/slack/oauth/authorize`

Start Slack OAuth that connects a Slack account as a new installation.

A personal connect (`access_mode=user`) creates an installation every time, so one person can hold several,
each feeding its own store with its own selection, e.g. public channels in one store and direct and group
messages in another; the same person in another organization is that organization's own. A workspace has
one bot, so a `bot` connect refreshes the workspace's bot installation when the organization has one. To
refresh an existing installation's tokens, reconnect it through
`GET /v1/integrations/slack/installations/{installation_id}/oauth/authorize` instead.

After consent the browser returns to the organization's return URL with `status`, `installation_id` or
`error`, and `reference`. `error` is `store_in_use` when another installation of the person already feeds
the store, `store_exists` when `new_store` names a store that exists by then, `new_store_on_refresh` when
`new_store` is set on a workspace bot's refresh, `store_change_on_refresh` when `store_name` names another
store than the refreshed bot's, `workspace_already_connected` when another organization
installed the workspace's bot, and otherwise the provider's error (such as `access_denied`),
`invalid_state` or `callback_failed`.

## Query parameters

- `store_name` string, nullable — Ingestion store name. A store that already exists is shared: every data source connected to it ingests into it, except another installation of the same account, which would ingest every item again. Without it, the account's default store, numbered past a store another installation of the account feeds. Rejected with 422 when the connect refreshes an existing installation and names a store other than its own.
- `access_mode` 'bot' | 'user' — Authorize as the current Slack user (default). `bot` installs a workspace bot and is only available from the dashboard; requests authenticated with an API key must use `user`.
- `reference` string, nullable — Opaque value echoed back as `reference` on the return URL, so your app can match the outcome to the user who started the flow
- `new_store` boolean — Ingest into a store created for this connection: the connect fails with 409 when `store_name` names a store that already exists, and without `store_name` the default name is numbered past existing stores. Rejected with 422 when the connect refreshes an existing installation, which keeps its store.
- `metadata_contextualization` boolean — Contextualize chunks with the connector's curated metadata fields
- `file_contextualization` boolean — Generate an LLM context for each chunk situating it within the full document
- `ingestion_mode` 'fast' | 'high_quality' — Strategy for adding a file to a store.

## Other responses

- `307` — Redirect to Slack OAuth
- `409` — The store already receives data from another installation of the same account, `new_store` names a store that already exists, a Slack workspace bot is already installed by a different Mixedbread organization, or a Notion internal integration that is already connected is asked for a new or different store
- `422` — The request failed validation, the credentials it carries were rejected, or `new_store` is set on a connect that refreshes an existing installation

## Changes

- **2026-09-26** `9c6c72afde2d` — 2 info
  - added the new optional `query` request parameter `new_store`
  - added the non-success response with the status `409`
- **2026-09-21** `b12f43c90ba3` — 1 warning
  - added the new `bucket_unavailable_error` enum value to the `code/anyOf[subschema #1: ErrorCode]/` response property for the response status `422`
- **2026-09-15** `957bf8ec8df8` — 1 warning
  - added the new `store_frozen_error` enum value to the `code/anyOf[subschema #1: ErrorCode]/` response property for the response status `422`
- **2026-09-10** `adde8ecfa74f` — 1 warning, 3 info
  - removed the optional property `detail` from the response with the `422` status
  - added the required property `code` to the response with the `422` status
  - added the required property `message` to the response with the `422` status
  - added the required property `type` to the response with the `422` status
- **2026-09-08** `ce403656bc18` — 1 info
  - added the new optional `query` request parameter `reference`

[Full history](https://skmtc.dev/mixedbread/apis/mxbai-omni/changes/v1/integrations/slack/oauth/authorize/get.md)

---

[API](https://skmtc.dev/mixedbread/apis/mxbai-omni.md) · [All operations](https://skmtc.dev/mixedbread/apis/mxbai-omni/llms.txt) · [OpenAPI document](https://skmtc.dev/mixedbread/apis/mxbai-omni/revisions/9c6c72afde2d?raw)
