Build any answer experience on our pipeline
Everything the widget does is available to your code: streaming RAG chat, hybrid search, feedback, and suggested questions — via the public REST API, the hosted widget script, an MCP server per knowledge base, and the React and JavaScript SDKs.
The developer surface
Same pipeline as the widget, full control of the experience
Public API
- SSE streaming chat with citations
- Hybrid search with ranked, scored results
- Suggested questions and related articles
- Form deflection with confidence scores
- Feedback and threaded conversations
Widget & MCP
- Hosted widget — one script tag from widget.kelu.dev
- MCP server per knowledge base for AI tools and IDE assistants
- Public keys for client-side, ID + secret for servers
- React and JavaScript SDKs — npm install @keluhq/react or @keluhq/sdk
Keys & Scoping
- kl_pk_ public keys safe for browsers
- kl_ci_/kl_cs_ credentials for backend calls
- Keys scoped per knowledge base
- Allowed source groups narrow retrieval per key
- Revoke instantly from the dashboard
Choose your integration depth
Start with the widget's one script tag. Drop to the REST API when you want your own UI, a server-side integration, or a mobile app. Connect AI tools and IDE assistants through the MCP server. Use the React or JavaScript SDK to skip the plumbing. Every level runs the same retrieval, grounding, and citations.
- Widget: one script tag, themeable, chat/sidebar/search modes with Cmd+K
- API: SSE streaming chat and search over HTTPS
- MCP: a search tool named after the knowledge base, plus ask_question, for AI assistants
- SDKs: @keluhq/react (<KeluChat />, useKeluChat) and @keluhq/sdk on npm
curl -N https://app.kelu.dev/api/v1/public/knowledge-bases/KB_ID/chat \
-H "X-Client-Id: kl_ci_..." \
-H "X-Client-Secret: kl_cs_..." \
-H "Content-Type: application/json" \
-d '{"query": "How do I paginate the list endpoint?"}'
data: {"citations": [...], "done": false}
data: {"delta": "Pass the cursor from ", "done": false}
data: {"done": true, "thread_id": "9b1f...", "citations": [...]}Answers you can check, from a system that won't guess
Every answer from your docs shows its sources
Numbered links point to the page and section each part of the answer came from, so anyone can check it in one click.
It says "I don't know"
When your content does not cover a question, Kelu does not guess. In a helpdesk it posts nothing and tags the ticket for your team.
Credentials are encrypted
Connection secrets are sealed with AES-256-GCM. If one can't be opened, the sync stops instead of running without it.
Got questions?
Frequently Asked Questions
Common questions about API & SDKs
Public client keys (kl_pk_…) are safe to ship in browsers and mobile apps; client ID + secret pairs (kl_ci_…/kl_cs_…) are for backend integrations. Keys are created per knowledge base and revocable from the dashboard.
Yes. Chat endpoints stream over server-sent events, delivering tokens as they generate plus a structured citations payload — the widget uses the same streams.
Yes. Keys are scoped to a knowledge base, and allowed source groups can narrow retrieval further — for example, a partner-facing key that only sees that partner's product docs. Scoping can narrow access, never widen it.
Yes. Every knowledge base exposes a standard Model Context Protocol (MCP) server endpoint, alongside open REST and SSE APIs.
Any. The hosted widget is one script tag, so it works in React, Next.js, Vue, or plain HTML, and the REST API works from any language. @keluhq/react covers React, and @keluhq/sdk covers browsers, React Native, and Node.js.
Start building on the API
Grab a client key and stream your first cited answer in minutes.
Free to start · No credit card required