---
title: "Finish a Slack install"
method: POST
path: "/api/{org_id}/slack/install/exchange"
tags: ["Slack"]
---

# Finish a Slack install

`POST /api/{org_id}/slack/install/exchange`

## Request

- Base URL: `https://api.openobserve.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.openobserve.ai/api/{org_id}/slack/install/exchange`
- Auth: API key in header `Authorization`
- TypeScript: <https://skmtc.dev/openobserve/apis/openobserve-api-http/docs/api/:org_id/slack/install/exchange/post.ts> (a function with typed inputs; its response is checked against the schema)

Redeems Slack's code, stores the bot token encrypted and connects this organization. The answer depends on the signed source: the destination form gets today's webhook fields, Settings gets the installation and the created destination, and a workspace already installed for another organization gets a single-use connect ticket.

## Path parameters

- `org_id` string, required

## Request body

- object

## Response `200`

Form, Settings or already-installed shape

- object

## Other responses

- `400`: Bad code or state
- `403`: Not an admin, or the OSS build
- `404`: Slack is not enabled for this organization
- `409`: Credentials from another app or team
- `502`: Slack refused the code

---

[API](https://skmtc.dev/openobserve/apis/openobserve-api-http.md) - [All operations](https://skmtc.dev/openobserve/apis/openobserve-api-http/llms.txt) - [OpenAPI document](https://skmtc.dev/openobserve/apis/openobserve-api-http/revisions/0529b8a10252?raw)
