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:
| Tier | conversations.history rate | Typical setup |
|---|---|---|
| Tier 1 | ~1 request/minute | Non-Marketplace apps |
| Tier 3 | ~50 requests/minute | Marketplace-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
- API docs: docs.trynia.ai
- Main site: trynia.ai
Happy to answer questions about the indexing pipeline or sync architecture.