---
title: "Search public Slack messages"
method: POST
path: "/internal/slack_search"
tags: ["slack_search"]
---

# Search public Slack messages

`POST /internal/slack_search`

Searches public Slack channel messages for an inbound Slack chat turn when the user does not have Slack MCP connected. Rails resolves the matching tenant Slack installation and keeps its bot token inside this service.

## Request body

- object
  - `semantic_query` string, required — Natural-language version of the user's question for Slack AI Search
  - `keyword_query` string, required — Compact literal keywords for keyword search and semantic-search fallback
  - `action_token` string, required — Short-lived Slack action token from the inbound event
  - `team_id` string, required — Slack workspace ID that issued the action token
  - `app_id` string, required — Slack app ID that issued the action token
  - `limit` number — Maximum messages to return (default: 10, max: 20)
  - `cursor` string — Optional Slack pagination cursor
  - `use_keyword_query` boolean — Use the literal keyword query instead of semantic search

## Other responses

- `400` — Bad Request - Invalid parameters or malformed request
- `401` — Unauthorized - Invalid or missing authentication
- `403` — Forbidden - User lacks permission to access this resource
- `404` — Not Found - Resource does not exist
- `422` — Unprocessable Entity - Invalid request parameters or validation errors
- `429` — Too Many Requests - Rate limit exceeded
- `500` — Internal Server Error - Unexpected server error

## Changes

- **2026-09-23** `765448cb74e4` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/rhythms/apis/rhythms-params-in-body/changes/internal/slack_search/post.md)

---

[API](https://skmtc.dev/rhythms/apis/rhythms-params-in-body.md) · [All operations](https://skmtc.dev/rhythms/apis/rhythms-params-in-body/llms.txt) · [OpenAPI document](https://skmtc.dev/rhythms/apis/rhythms-params-in-body/revisions/be444d98d5ff?raw)
