Introducing Nia Slack Search API

Slack search is frustratingly bad.

It is mostly keyword-only, has no real semantic understanding, and is painful when you need to find decisions from older threads.

So we built an alternative for Nia: a Slack Search API that indexes your workspace, keeps it synced, and lets you search semantically or via agentic retrieval.

How it works

  • Connect via OAuth (dashboard) or BYOT token registration (API)
  • Index channel history, then keep it synced incrementally
  • Semantic retrieval via embeddings
  • Keyword retrieval via BM25 grep
  • API endpoints AI agents can query for conversational context

Connection models

  • OAuth (dashboard): connect your own Slack workspace in a few clicks
  • BYOT (enterprise): register external customer bot tokens via API for multi-tenant indexing

Both models use the same search stack, and each installation gets its own isolated workspace context.

Sync behavior

After the initial backfill, Slack Events keep indexed data fresh in near real time.

  • New messages are indexed automatically
  • Message edits are reflected
  • Deleted messages are removed

In practice, updates propagate within seconds.

Indexing expectations

Initial indexing speed depends on your Slack app rate limits:

Tierconversations.history rateTypical setup
Tier 1~1 request/minuteNon-Marketplace apps
Tier 3~50 requests/minuteMarketplace-listed apps

For larger workspaces (10k+ messages), initial indexing can take 30-60 minutes on Tier 1. After first index, real-time sync handles freshness.

Why we built this

We are building Nia (YC S25), a search and indexing API for AI agents.

We started with technical docs and codebases, but quickly realized agents also need internal company knowledge. For most teams, that knowledge lives in Slack.

The agent use case is the key:

  • Support agents that understand past product decisions
  • Coding agents that can reference prior technical discussions
  • Internal tools that answer with real organizational context

API example

Register a workspace with BYOT:

curl -X POST https://apigcp.trynia.ai/v2/slack/install/token \
  -H "Authorization: Bearer $NIA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "bot_token": "xoxb-...",
    "name": "Customer Workspace"
  }'

Then query with semantic search:

curl -X POST https://apigcp.trynia.ai/v2/search/query \
  -H "Authorization: Bearer $NIA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "messages": [{"role": "user", "content": "what did we decide about the migration?"}],
    "slack_workspaces": ["a9e51db8-..."],
    "include_sources": true,
    "stream": true
  }'

Privacy and isolation

  • Data is isolated by org-scoped namespaces
  • Each Slack installation is isolated for multi-tenant use cases
  • Bot tokens are encrypted at rest
  • Customers can revoke access by uninstalling their Slack app

Demo

Try it

Happy to answer questions about the indexing pipeline or sync architecture.