# InsiteChat Alternatives — Every Credible Competitor (2026)
Source: https://docs.insitechat.ai/alternatives
Honest, ranked list of every credible InsiteChat alternative in 2026 — Chatbase, SiteGPT, Tidio, Botsonic, Intercom, CustomGPT, Crisp, and more. When each wins.
## Why this page exists
Most "alternatives to X" pages are thinly disguised marketing for X. This one is different: we list every credible competitor honestly, including cases where they're the better choice. We'd rather you pick the right tool than churn after three months because we oversold.
If you're evaluating InsiteChat, here's the full landscape.
## The AI chatbot category (2026)
The "train an AI chatbot on your content" category has matured into several distinct sub-categories. Pick the right sub-category first, then pick the tool inside it.
### Sub-category 1: AI chatbot platforms (the main category)
Built around RAG: train on your content, deploy a chat widget, optional integrations. This is the heart of the market.
| Product | Best for | Starting price | India support |
| ------------------------- | ------------------------------------------------------------ | -------------- | ------------- |
| **InsiteChat** | Indian businesses, budget-conscious teams, technical content | ₹0 / \$0 | ✅ Native |
| **Chatbase** | US/EU teams who want the most established brand | \$19 / mo | ❌ USD only |
| **SiteGPT** | Long-time users; English-only docs use cases | \$49 / mo | ❌ USD only |
| **Botsonic** (Writesonic) | Marketing teams already on Writesonic | \$19 / mo | ❌ USD only |
| **CustomGPT** | Enterprises needing GPT-4-grade quality at higher cost | \$89 / mo | ❌ USD only |
### Sub-category 2: Live chat platforms with AI add-on
Built as human live chat first; AI was added later. Strong if you have agents.
| Product | Best for | Starting price |
| --------------------- | ------------------------------------------ | ----------------------- |
| **Tidio** | Shopify stores, SMBs with 1-3 agents | \$29 / mo |
| **Intercom** (Fin AI) | Enterprises with mature support orgs | \$39 / agent / mo + Fin |
| **Crisp** | EU SMBs, dev-friendly teams | \$25 / mo |
| **Freshchat** | Freshworks ecosystem customers | \$19 / mo |
| **Zendesk** + AI | Enterprise support orgs already on Zendesk | \$55+ / agent / mo |
### Sub-category 3: Enterprise / vertical-specific
Heavily customized solutions for specific industries.
| Product | Best for |
| ---------------- | ----------------------------------- |
| **Ada** | Enterprise customer support |
| **Forethought** | Enterprise support deflection |
| **Yellow\.ai** | Enterprise omnichannel (India/APAC) |
| **Haptik** (Jio) | Indian enterprise, voice + chat |
### Sub-category 4: Build-your-own (frameworks)
For developers who'd rather code than buy.
* **LangChain / LlamaIndex** + Pinecone — DIY RAG, \~weeks of dev time
* **Vercel AI SDK** — UI scaffolding, BYO backend
* **OpenAI Assistants API** — managed, less flexibility
Build-your-own makes sense if you have 2+ engineers willing to maintain it forever. For everyone else, buy.
## Picking the right tool — by use case
### "I need a docs chatbot for my SaaS — fast, cheap, just works"
**Top picks**: InsiteChat → Chatbase → SiteGPT (in that price order).
All three work. InsiteChat wins on cost and India support. Chatbase wins on brand. SiteGPT wins on legacy maturity.
### "I run a Shopify e-commerce store"
**Top picks**: Tidio → InsiteChat → Chatbase.
Tidio's Shopify integration is the deepest. InsiteChat is cheaper and has WhatsApp BYOK if that matters.
### "I'm an Indian business and don't want to deal with USD billing"
**Top picks**: InsiteChat → Haptik (enterprise) → DIY.
InsiteChat is the only mainstream chatbot platform with native INR billing, GST invoices, UPI payments, and Hindi/Hinglish support.
### "I have a team of human support agents and want AI to deflect tickets"
**Top picks**: Intercom Fin AI (enterprise budget) → Tidio (SMB) → InsiteChat + Crisp/Freshchat/Zendesk handoff.
The third option keeps your existing live-chat tool and just adds an AI deflection layer — often the cheapest path.
### "I need WhatsApp Business as a primary channel"
**Top picks**: InsiteChat (BYOK, no markup) → Haptik (enterprise) → Yellow\.ai.
Most chatbot platforms add a markup on WhatsApp messages. InsiteChat's BYOK approach means you pay Meta directly.
### "I need on-premise / self-hosted deployment"
**Top picks**: Build-your-own (LangChain + Pinecone) → Enterprise vendors with self-host options (Yellow\.ai, Haptik).
SaaS platforms (InsiteChat, Chatbase, SiteGPT, Tidio) are all cloud-only.
### "I have a \$500/mo budget and 10,000 messages/mo"
**Top picks**: InsiteChat Growth (₹2,847/mo ≈ $34/mo) → Chatbase Standard (~$40/mo) → SiteGPT Starter (\$49/mo).
InsiteChat Growth gives you 10,000 messages, 2 chatbots, custom branding. Hard to beat at the price.
### "I have a \$50/mo budget and need basic features"
**Top picks**: InsiteChat Starter ($29/mo) → Chatbase Hobby ($19/mo) → Tidio Starter (\$29/mo).
At this tier, the InsiteChat free plan is worth trying first — many SMBs never need to upgrade.
## When InsiteChat is **not** the right choice
We listed several scenarios above where competitors win. Specifically, do not pick InsiteChat if:
1. **You need a SOC 2 Type II certified vendor today** — work in progress, not certified yet.
2. **You need on-premise / self-hosted** — SaaS-only today.
3. **You need voice/phone bot capabilities** — chat-only today.
4. **Live chat is your primary product** — Tidio, Intercom, or Crisp have more mature agent tooling.
5. **Your buyers will only accept the category leader by brand** — Chatbase or Intercom has more recognition in some US/EU buying contexts.
## Honest pitch for InsiteChat
We win when these are your priorities:
* Cost-efficiency (especially for INR-billed teams)
* AI quality on technical or India-specific content (hybrid retrieval)
* WhatsApp Business with no per-message markup
* A real Free plan, not a 7-day trial
* Hindi/Hinglish support
We lose when these are your priorities:
* Maximum brand recognition with US/EU enterprise buyers
* Most mature human-agent live chat tooling
* On-premise deployment
* SOC 2 Type II compliance today
## Talk to us
Evaluating InsiteChat against a specific competitor not listed here? Email **[support@insitechat.ai](mailto:support@insitechat.ai)** with your shortlist and use case — we'll send back an honest recommendation, even if it's a competitor.
## Learn more
* [InsiteChat vs Chatbase](/compare/chatbase)
* [InsiteChat vs SiteGPT](/compare/sitegpt)
* [InsiteChat vs Tidio](/compare/tidio)
* [InsiteChat pricing](/plans-and-pricing)
* [How hybrid retrieval works](/concepts/hybrid-search)
# API Authentication
Source: https://docs.insitechat.ai/api-reference/authentication
Authenticate to the InsiteChat REST API using Bearer tokens. Create, list, and revoke API keys from the dashboard. Keys grant access to all chatbots you own.
The **InsiteChat API** uses **Bearer token authentication**. Every request must include a valid API key in the `Authorization` header. Keys are tied to your InsiteChat user account and grant access to all chatbots you own.
## Creating an API Key
From your dashboard, navigate to **Developer** → **API Keys**.
Click **Create API Key**, give it a descriptive name (e.g. *Production Server*, *Staging*, *Zapier Integration*), and click **Generate**.
The full key is displayed **only once**. Copy it to a secure store immediately.
You can have at most **5 active API keys** per account. If you hit the cap, revoke an unused key before creating a new one. If you lose a key, revoke it and create a fresh one — there is no way to retrieve a key after the creation screen closes.
## Key Format
API keys are URL-safe random tokens prefixed with `ic_`:
```
ic_aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789AbCdEfGh
```
The first 8 characters (the `prefix`, which always starts with `ic_`) are shown in the dashboard so you can identify which key is which. The full key is never stored on InsiteChat servers — only its SHA-256 hash — which is why we can't show it back to you after creation.
## Using Your API Key
Include the API key in the `Authorization` header of every request:
```bash cURL theme={null}
curl https://backend.insitechat.ai/api/v1/chatbots \
-H "Authorization: Bearer ic_your-full-api-key-here"
```
```python Python theme={null}
import requests
API_KEY = "ic_your-full-api-key-here"
session = requests.Session()
session.headers.update({"Authorization": f"Bearer {API_KEY}"})
# Now every request via `session` is authenticated:
chatbots = session.get("https://backend.insitechat.ai/api/v1/chatbots").json()
```
```javascript Node.js theme={null}
const API_KEY = process.env.INSITECHAT_API_KEY;
const headers = { Authorization: `Bearer ${API_KEY}` };
const res = await fetch("https://backend.insitechat.ai/api/v1/chatbots", {
headers,
});
const chatbots = await res.json();
```
```go Go theme={null}
req, _ := http.NewRequest("GET", "https://backend.insitechat.ai/api/v1/chatbots", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("INSITECHAT_API_KEY"))
resp, err := http.DefaultClient.Do(req)
```
Never expose your API key in browser JavaScript, mobile app bundles, public Git repos, or anywhere a customer could read it. Always call the API from a server you control.
## Listing Your Keys
`Dashboard` → **Developer** → **API Keys** shows every key on your account with:
* **Name** — the label you gave the key at creation
* **Prefix** — the first 8 characters (e.g. `ic_aBcDeF`) so you can spot which key is which
* **Last used** — the timestamp of the most recent successful API call (or *Never* if unused)
* **Created** — when the key was generated
* **Active / Revoked** — current state
## Revoking a Key
1. Find the key on the **API Keys** page.
2. Click **Revoke** and confirm.
Revoked keys stop working immediately. Any subsequent request using a revoked key returns `401 Unauthorized` (the same response as a malformed or unknown key — there is no separate error code distinguishing the two).
Use separate keys for each environment (production, staging, dev) and each integration (Zapier, your CRM sync, internal scripts). That way revoking a leaked key only impacts one consumer.
## Rate Limiting
Each API key is rate-limited to **60 requests per minute** on a rolling 60-second window.
When you exceed the limit, the API returns:
```http theme={null}
HTTP/1.1 429 Too Many Requests
Content-Type: application/json
{"detail": "API rate limit exceeded. Max 60 requests per minute."}
```
There is **no `Retry-After` header** — back off on a fixed schedule (e.g. wait 60 seconds before retrying).
Implement client-side throttling so you stay well under 60/min. If you genuinely need more headroom, [contact support](mailto:support@insitechat.ai).
## Error Responses
The API returns standard HTTP status codes. Error bodies follow the Django Ninja default shape — a single `detail` field describing what went wrong:
| Status | Typical `detail` | Cause |
| ------ | -------------------------------------------------------- | ---------------------------------------------------------------- |
| `401` | (Ninja default `Unauthorized`) | Missing, malformed, or revoked API key |
| `400` | `Maximum 5 active API keys allowed.` | Hit the per-account key cap when calling the create-key endpoint |
| `404` | `API key not found.` | Tried to revoke a key that doesn't exist or isn't yours |
| `429` | `API rate limit exceeded. Max 60 requests per minute.` | Per-key rate limit |
| `429` | `Monthly message limit reached.` (or similar quota text) | Plan message quota exhausted (only on the chat endpoint) |
There is **no machine-readable `code` field** today — branch on the HTTP status (and on the `detail` text if you need to distinguish rate-limit `429`s from quota `429`s).
# Chat API — Send Messages Programmatically
Source: https://docs.insitechat.ai/api-reference/chat
Send a message to an InsiteChat chatbot via the REST API and receive an AI-generated reply grounded in your training content. Hybrid retrieval, RRF fusion, JSON response.
The InsiteChat **Chat API** runs your message through the same [RAG](/concepts/what-is-rag) pipeline as the web embed — [hybrid vector + BM25 retrieval](/concepts/hybrid-search) with Reciprocal Rank Fusion, [system prompt](/concepts/system-prompts), identity rules, and conversation history — then returns the chatbot's reply as a single JSON response. Streaming is not supported.
## Send a Message
### Request
```
POST /v1/chatbots/{chatbot_id}/chat
```
| Path parameter | Type | Required | Description |
| -------------- | ---- | -------- | ------------------------------------------------------------ |
| `chatbot_id` | UUID | yes | The chatbot to message. Must be owned by the API key's user. |
### Body
| Field | Type | Required | Description |
| ------------ | ------ | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `message` | string | yes | The user's message. |
| `session_id` | string | no | A session identifier so the chatbot can track conversation history across multiple turns. If omitted, defaults to `api-` (so all keyless calls share one conversation per user — usually not what you want for production). |
### Example
```bash cURL theme={null}
curl -X POST https://backend.insitechat.ai/api/v1/chatbots/0a1b2c3d-4e5f-6789-abcd-ef0123456789/chat \
-H "Authorization: Bearer ic_your-api-key" \
-H "Content-Type: application/json" \
-d '{
"message": "What is your return policy?",
"session_id": "user-42-session-abc"
}'
```
```python Python theme={null}
import requests
CHATBOT_ID = "0a1b2c3d-4e5f-6789-abcd-ef0123456789"
API_KEY = "ic_your-api-key"
response = requests.post(
f"https://backend.insitechat.ai/api/v1/chatbots/{CHATBOT_ID}/chat",
headers={
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
},
json={
"message": "What is your return policy?",
"session_id": "user-42-session-abc",
},
timeout=30,
)
response.raise_for_status()
print(response.json()["response"])
```
```javascript Node.js theme={null}
const CHATBOT_ID = "0a1b2c3d-4e5f-6789-abcd-ef0123456789";
const API_KEY = "ic_your-api-key";
const res = await fetch(
`https://backend.insitechat.ai/api/v1/chatbots/${CHATBOT_ID}/chat`,
{
method: "POST",
headers: {
Authorization: `Bearer ${API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
message: "What is your return policy?",
session_id: "user-42-session-abc",
}),
}
);
if (!res.ok) throw new Error(`InsiteChat ${res.status}: ${await res.text()}`);
const { response } = await res.json();
console.log(response);
```
```typescript TypeScript theme={null}
const CHATBOT_ID = "0a1b2c3d-4e5f-6789-abcd-ef0123456789";
const API_KEY = process.env.INSITECHAT_API_KEY!;
interface ChatResponse {
response: string;
}
export async function askChatbot(
message: string,
sessionId: string
): Promise {
const res = await fetch(
`https://backend.insitechat.ai/api/v1/chatbots/${CHATBOT_ID}/chat`,
{
method: "POST",
headers: {
Authorization: `Bearer ${API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ message, session_id: sessionId }),
}
);
if (!res.ok) {
throw new Error(`InsiteChat ${res.status}: ${await res.text()}`);
}
const data: ChatResponse = await res.json();
return data.response;
}
```
```go Go theme={null}
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)
const (
chatbotID = "0a1b2c3d-4e5f-6789-abcd-ef0123456789"
apiKey = "ic_your-api-key"
)
type chatRequest struct {
Message string `json:"message"`
SessionID string `json:"session_id"`
}
type chatResponse struct {
Response string `json:"response"`
}
func main() {
body, _ := json.Marshal(chatRequest{
Message: "What is your return policy?",
SessionID: "user-42-session-abc",
})
req, _ := http.NewRequest(
"POST",
fmt.Sprintf("https://backend.insitechat.ai/api/v1/chatbots/%s/chat", chatbotID),
bytes.NewReader(body),
)
req.Header.Set("Authorization", "Bearer "+apiKey)
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
data, _ := io.ReadAll(resp.Body)
var out chatResponse
json.Unmarshal(data, &out)
fmt.Println(out.Response)
}
```
### Response
```json theme={null}
{
"response": "Our return policy allows returns within 30 days of purchase. Items must be in their original condition with tags attached. To start a return, go to your order history and click \"Request Return\" on the item you'd like to send back."
}
```
| Field | Type | Description |
| ---------- | ------ | -------------------- |
| `response` | string | The chatbot's reply. |
The endpoint **does not** return a `conversation_id` — the conversation is keyed by your `session_id`. If you need to correlate the reply with a server-side conversation record, subscribe to the [`conversation.started`](/api-reference/webhooks) webhook.
## Multi-Turn Conversations
Pass the same `session_id` on every call to give the chatbot the last 10 turns of history:
```bash theme={null}
# Turn 1
curl -X POST https://backend.insitechat.ai/api/v1/chatbots/0a1b2c3d-.../chat \
-H "Authorization: Bearer ic_your-api-key" \
-H "Content-Type: application/json" \
-d '{"message": "What is your return policy?", "session_id": "user-42-session-abc"}'
# Turn 2 — same session_id
curl -X POST https://backend.insitechat.ai/api/v1/chatbots/0a1b2c3d-.../chat \
-H "Authorization: Bearer ic_your-api-key" \
-H "Content-Type: application/json" \
-d '{"message": "Does that apply to sale items too?", "session_id": "user-42-session-abc"}'
```
Use one `session_id` per end-user session (e.g. derived from your own user ID + a UUID per visit). Without a `session_id`, every request shares one default per-key conversation, which mixes up history.
## Error Responses
Error bodies use Django Ninja's default `{"detail": "..."}` shape — no machine-readable `code` field.
| Status | When |
| ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `401` | Missing, invalid, or revoked API key |
| `404` | No chatbot exists with that UUID **or** the chatbot belongs to a different user |
| `429` | Per-key rate limit (`API rate limit exceeded. Max 60 requests per minute.`) **or** plan message quota exhausted (e.g. `Monthly message limit reached.`) — distinguish by reading the `detail` text |
| `500` | LLM provider error or internal fault |
Every successful chat request counts toward your plan's **monthly message quota**. Only `role='user'` messages count — assistant replies are free. Track usage in **Dashboard** → **Analytics**, or upgrade your plan in **Plans & Pricing**.
## What Happens Under the Hood
Each call:
1. Enforces your plan's monthly message quota and per-conversation rate limit (raises `429` if exceeded).
2. Looks up or creates a `Conversation` keyed by `(chatbot_id, session_id)`.
3. If a human agent has taken over this conversation, persists the inbound message but skips LLM generation (no reply is returned in that case — the dashboard surfaces it for the agent).
4. Saves the user message and fires the `conversation.started` webhook (if newly created) and `message.received` webhook.
5. Retrieves relevant context via hybrid vector + BM25 search with RRF fusion.
6. Builds the prompt (your chatbot's system prompt + identity rules + retrieved context + last 10 turns).
7. Calls the configured LLM provider (Gemini / OpenAI / Ollama) and saves + returns the reply.
# Chatbots API — List & Retrieve
Source: https://docs.insitechat.ai/api-reference/chatbots
List your InsiteChat chatbots and retrieve a single chatbot's details via the REST API. Two read-only endpoints for programmatic chatbot inventory.
Two read-only **InsiteChat API** endpoints for inspecting the chatbots on your account. Useful for building custom dashboards, dropdown pickers, or any workflow that needs to enumerate the chatbots you own.
## List Chatbots
Returns every chatbot owned by the API key's user (excluding soft-deleted ones).
### Request
```
GET /v1/chatbots
```
```bash theme={null}
curl https://backend.insitechat.ai/api/v1/chatbots \
-H "Authorization: Bearer ic_your-api-key"
```
### Response
A bare JSON array (no wrapping envelope):
```json theme={null}
[
{
"id": "0a1b2c3d-4e5f-6789-abcd-ef0123456789",
"name": "Support Bot",
"slug": "support-bot",
"provider": "gemini",
"is_active": true,
"created_at": "2026-03-15T10:30:00.123456+00:00"
},
{
"id": "1b2c3d4e-5f67-89ab-cdef-0123456789ab",
"name": "Sales Assistant",
"slug": "sales-assistant",
"provider": "chatgpt",
"is_active": true,
"created_at": "2026-03-20T09:00:00.654321+00:00"
}
]
```
### Response Fields
| Field | Type | Description |
| ------------ | ------- | ----------------------------------------------------------- |
| `id` | UUID | Unique chatbot identifier (bare UUID, no prefix). |
| `name` | string | Display name. |
| `slug` | string | URL-friendly slug derived from the name. |
| `provider` | string | LLM backend: `gemini`, `chatgpt`, or `ollama`. |
| `is_active` | boolean | `false` if the owner paused the chatbot from the dashboard. |
| `created_at` | string | ISO 8601 timestamp. |
## Get Chatbot Details
Returns the configuration for a single chatbot.
### Request
```
GET /v1/chatbots/{chatbot_id}
```
| Path parameter | Type | Required | Description |
| -------------- | ---- | -------- | -------------------------------------------- |
| `chatbot_id` | UUID | yes | The chatbot's UUID (from the list response). |
```bash theme={null}
curl https://backend.insitechat.ai/api/v1/chatbots/0a1b2c3d-4e5f-6789-abcd-ef0123456789 \
-H "Authorization: Bearer ic_your-api-key"
```
### Response
```json theme={null}
{
"id": "0a1b2c3d-4e5f-6789-abcd-ef0123456789",
"name": "Support Bot",
"slug": "support-bot",
"provider": "gemini",
"system_prompt": "You are a helpful customer support assistant for Acme Inc.",
"fallback_message": "I'm sorry, I don't have enough information to answer that.",
"is_active": true,
"created_at": "2026-03-15T10:30:00.123456+00:00"
}
```
### Response Fields
| Field | Type | Description |
| ------------------ | ------- | ------------------------------------------------------------ |
| `id` | UUID | Unique chatbot identifier. |
| `name` | string | Display name. |
| `slug` | string | URL-friendly slug. |
| `provider` | string | LLM backend (`gemini`, `chatgpt`, `ollama`). |
| `system_prompt` | string | The persona / system prompt the chatbot uses. |
| `fallback_message` | string | The reply used when the LLM can't answer (or returns empty). |
| `is_active` | boolean | Paused state. |
| `created_at` | string | ISO 8601 timestamp. |
Chatbot IDs are bare UUIDs — there is no `bot_` prefix. You can also find a chatbot's UUID in the dashboard URL (`/dashboard/chatbots/{uuid}/...`).
## Error Responses
Error bodies use Django Ninja's default `{"detail": "..."}` shape.
| Status | When |
| ------ | ------------------------------------------------------------------- |
| `401` | Missing, invalid, or revoked API key |
| `404` | No chatbot exists with that UUID, or it belongs to a different user |
| `429` | Per-key rate limit exceeded |
# REST API Overview
Source: https://docs.insitechat.ai/api-reference/overview
Programmatically manage chatbots, list sources, send chat messages, and receive webhook events using the InsiteChat REST API. Bearer-token auth, JSON over HTTPS.
The **InsiteChat REST API** lets you programmatically list chatbots, retrieve training sources, send chat messages, and subscribe to events — useful for embedding InsiteChat inside your own product, automating support workflows, or building custom dashboards on top of your chatbot data.
Webhooks deliver real-time events (lead captured, message received, conversation started, conversation escalated) to a URL of your choice — see [Webhooks](/api-reference/webhooks).
## Base URL
All API requests are made to:
```
https://backend.insitechat.ai/api/v1
```
## Authentication
Every request must include your API key as a Bearer token in the `Authorization` header:
```bash theme={null}
Authorization: Bearer ic_
```
API keys are prefixed with `ic_` followed by a URL-safe random token. See [Authentication](/api-reference/authentication) for how to create, list, and revoke keys.
## Response Format
All responses are JSON.
**Successful list endpoints return a bare array:**
```json theme={null}
[
{
"id": "0a1b2c3d-4e5f-6789-abcd-ef0123456789",
"name": "Support Bot",
"slug": "support-bot",
"provider": "gemini",
"is_active": true,
"created_at": "2026-03-15T10:30:00+00:00"
}
]
```
**Single-object endpoints return the object directly** (no wrapping envelope).
**Error responses** use Django Ninja's default shape — a single `detail` field describing what went wrong:
```json theme={null}
{
"detail": "API rate limit exceeded. Max 60 requests per minute."
}
```
There are no machine-readable `code` fields on errors today; branch on the HTTP status code instead.
## HTTP Status Codes
| Code | Meaning |
| ----- | -------------------------------------------------------------------------------------------------------- |
| `200` | Success |
| `400` | Bad request (malformed body, missing required field, or hit account limit such as max 5 active API keys) |
| `401` | Unauthorized — missing, invalid, or revoked API key |
| `404` | Resource not found, or chatbot not owned by the API key's user |
| `429` | Rate limit exceeded **or** plan message quota exhausted (the `detail` text distinguishes them) |
| `500` | Server error |
## Rate Limits
Per API key: **60 requests per minute** (rolling 60-second window). When you exceed it, the API returns:
```http theme={null}
HTTP/1.1 429 Too Many Requests
Content-Type: application/json
{"detail": "API rate limit exceeded. Max 60 requests per minute."}
```
There is **no `Retry-After` header** today — back off on a fixed schedule (e.g. wait 60 seconds, then retry).
Separately, the `POST /v1/chatbots/{id}/chat` endpoint counts against your **plan's monthly message quota** (see [plans & pricing](/plans-and-pricing)). When the quota is exhausted, the same endpoint also returns `429`, but with a quota-specific `detail` message (e.g. `"Monthly message limit reached."`). Branch on the message text if you need to distinguish the two.
Need higher rate limits or quota? [Contact support](mailto:support@insitechat.ai).
## How to Get an API Key
Sign in at [insitechat.ai](https://insitechat.ai).
Navigate to **Dashboard** → **Developer** → **API Keys**.
Click **Create API Key**, give it a descriptive name (e.g. *Production Server*), and click **Generate**.
The full key is shown **only once** at creation time. Copy it to a secure store; if you lose it, revoke it and create a new one.
Each user account is limited to **5 active API keys**. Revoke unused keys before creating new ones if you hit the cap. Treat keys like passwords — never expose them in client-side JavaScript, mobile bundles, or public repos. Always call the API from your backend.
## Available Endpoints
List chatbots and retrieve a single chatbot's details.
Send a message to a chatbot and receive an AI-generated reply.
List the training sources on a chatbot.
Configure outgoing webhooks to receive real-time events.
# Sources API — Manage Training Content
Source: https://docs.insitechat.ai/api-reference/sources
List every active training source on an InsiteChat chatbot via the REST API — websites, files, Google Drive folders, Notion pages, and more. Build sync dashboards and audit content.
A read-only **InsiteChat API** endpoint that lists every active training source on a chatbot — websites, uploaded files, Google Drive folders, Notion pages, Dropbox files, custom Q\&A, and more. Use it to inspect what your chatbot is trained on, monitor crawl status, or build sync dashboards.
## List Sources
Returns every source on the chatbot (excluding soft-deleted ones), newest first.
### Request
```
GET /v1/chatbots/{chatbot_id}/sources
```
| Path parameter | Type | Required | Description |
| -------------- | ---- | -------- | -------------------------------------------------------- |
| `chatbot_id` | UUID | yes | The chatbot's UUID. Must be owned by the API key's user. |
```bash theme={null}
curl https://backend.insitechat.ai/api/v1/chatbots/0a1b2c3d-4e5f-6789-abcd-ef0123456789/sources \
-H "Authorization: Bearer ic_your-api-key"
```
### Response
A bare JSON array (no wrapping envelope):
```json theme={null}
[
{
"id": "ab12cd34-5e6f-7890-abcd-ef1234567890",
"type": "url",
"title": "Acme Help Center",
"url": "https://help.acme.com",
"status": "done",
"page_count": 42,
"created_at": "2026-04-01T10:00:00.123456+00:00"
},
{
"id": "cd34ef56-7890-abcd-ef12-3456789012cd",
"type": "file",
"title": "Product Datasheet.pdf",
"url": "",
"status": "processing",
"page_count": 0,
"created_at": "2026-04-10T14:22:00.654321+00:00"
}
]
```
### Response Fields
| Field | Type | Description |
| ------------ | ------- | ------------------------------------------------------------------------------------------------------------------- |
| `id` | UUID | Source identifier. |
| `type` | string | One of the source types listed below. |
| `title` | string | Display title (filename for files, page title for URLs, user-supplied label for text). May be empty if not yet set. |
| `url` | string | The crawled URL (for `url` sources) or empty for non-URL types. |
| `status` | string | `pending`, `crawling`, `processing`, `done`, or `failed`. |
| `page_count` | integer | Pages successfully indexed (URL crawls and multi-page files); `0` for single-document or pre-ingest sources. |
| `created_at` | string | ISO 8601 timestamp. |
### Source Types
| Type | Description |
| -------------- | -------------------------------------------------------------------------------------------------------- |
| `url` | Website URL (crawled) |
| `file` | Uploaded file (PDF, DOCX, PPTX, TXT, MD, CSV) |
| `text` | Raw text snippet |
| `youtube` | YouTube video transcript |
| `google_drive` | Google Drive file |
| `notion` | Notion page |
| `dropbox` | Dropbox file |
| `onedrive` | OneDrive file *(backend type only — not yet exposed in the dashboard's Add Source picker)* |
| `sharepoint` | SharePoint file *(backend type only — not yet exposed in the dashboard's Add Source picker)* |
| `zendesk` | Zendesk Help Center article *(backend type only — not yet exposed in the dashboard's Add Source picker)* |
| `gitbook` | GitBook page *(backend type only — not yet exposed in the dashboard's Add Source picker)* |
The "backend type only" rows above mean the type can appear in API responses on accounts where support has manually enabled the source, but you can't add new sources of those types from the dashboard yet. See [Source Management](/managing/source-management) for the current UI inventory.
## Error Responses
Error bodies use Django Ninja's default `{"detail": "..."}` shape.
| Status | When |
| ------ | ------------------------------------------------------------------- |
| `401` | Missing, invalid, or revoked API key |
| `404` | No chatbot exists with that UUID, or it belongs to a different user |
| `429` | Per-key rate limit exceeded |
# Webhooks — Real-time Chatbot Events
Source: https://docs.insitechat.ai/api-reference/webhooks
Subscribe to real-time InsiteChat events — leads captured, messages received, conversations started, human escalations — via HMAC-signed outgoing HTTP webhooks.
**InsiteChat webhooks** fire HMAC-signed HTTP `POST` requests to URLs you configure whenever specific events happen on a chatbot. Use webhooks to push leads into your CRM, mirror conversations into a data warehouse, or trigger [Zapier](/integrations/zapier) / Make.com / n8n workflows.
Set up webhooks in **Dashboard** → your chatbot → **Webhooks** → **Add Webhook**. Pick the events you care about, set a destination URL, and InsiteChat does the rest.
## Events
| Event | When it fires |
| ------------------------ | ------------------------------------------------------------------------------------------ |
| `lead.captured` | A visitor submitted the lead form |
| `conversation.started` | The first message of a brand-new conversation |
| `message.received` | Every visitor message (after `conversation.started` on the first turn) |
| `conversation.escalated` | The visitor (or smart-intent / CTA) requested human help — fires **once** per conversation |
## Common Envelope
Every event uses the same outer envelope. The event-specific payload lives under `data`:
```json theme={null}
{
"event": "lead.captured",
"chatbot_id": "0a1b2c3d-4e5f-6789-abcd-ef0123456789",
"timestamp": "2026-04-23T12:00:00.123456+00:00",
"data": { /* event-specific shape — see below */ }
}
```
| Field | Type | Description |
| ------------ | ------ | ------------------------------------------------------- |
| `event` | string | Event name (one of the four above). |
| `chatbot_id` | UUID | The chatbot the event belongs to. |
| `timestamp` | string | ISO 8601 timestamp of when the event was queued. |
| `data` | object | Event-specific payload. See the per-event shapes below. |
## Per-Event Payloads
### `lead.captured`
```json theme={null}
{
"event": "lead.captured",
"chatbot_id": "0a1b2c3d-...",
"timestamp": "2026-04-23T12:00:00.123456+00:00",
"data": {
"lead_id": "ab12cd34-5e6f-7890-abcd-ef1234567890",
"name": "Jane Doe",
"email": "jane@example.com",
"phone": "+1234567890",
"custom_data": { "company": "Acme Corp", "role": "VP Engineering" }
}
}
```
| Field | Type | Notes |
| -------------------------- | ------ | ----------------------------------------------------------------------------------------------------- |
| `lead_id` | UUID | The Lead record ID. |
| `name` / `email` / `phone` | string | May be empty strings if the form didn't collect them or the visitor skipped the field. |
| `custom_data` | object | Any custom fields configured on the lead form, keyed by field name. Empty object if no custom fields. |
### `conversation.started`
```json theme={null}
{
"event": "conversation.started",
"chatbot_id": "0a1b2c3d-...",
"timestamp": "2026-04-23T12:00:01.123456+00:00",
"data": {
"conversation_id": "f1e2d3c4-...",
"session_id": "embed-abc123",
"source": "embed"
}
}
```
| Field | Type | Notes |
| ----------------- | ------ | ------------------------------------------------------------------------------------------------------ |
| `conversation_id` | UUID | The Conversation record ID. |
| `session_id` | string | Channel-prefixed: `embed-…` (web widget), `wa_…` (WhatsApp), `tg_…` (Telegram), or `api-…` (REST API). |
| `source` | string | Origin channel: `embed`, `whatsapp`, `telegram`, or `api`. |
### `message.received`
```json theme={null}
{
"event": "message.received",
"chatbot_id": "0a1b2c3d-...",
"timestamp": "2026-04-23T12:00:01.456789+00:00",
"data": {
"conversation_id": "f1e2d3c4-...",
"session_id": "embed-abc123",
"content": "Hi! Do you ship to Canada?",
"source": "embed"
}
}
```
| Field | Type | Notes |
| ----------------- | ------ | ------------------------------------------------------- |
| `conversation_id` | UUID | The Conversation record ID. |
| `session_id` | string | Same channel-prefixed format as `conversation.started`. |
| `content` | string | The visitor's raw message text. |
| `source` | string | Origin channel. |
### `conversation.escalated`
Fires **once per conversation** the first time the visitor (or a smart-intent / CTA / agent rule) flips the conversation into "needs a human" mode. Subsequent triggers on an already-escalated conversation are no-ops.
```json theme={null}
{
"event": "conversation.escalated",
"chatbot_id": "0a1b2c3d-...",
"timestamp": "2026-04-23T12:00:30.123456+00:00",
"data": {
"conversation_id": "f1e2d3c4-...",
"session_id": "embed-abc123",
"channel": "web",
"escalated_at": "2026-04-23T12:00:30.000000+00:00"
}
}
```
| Field | Type | Notes |
| ----------------- | ------ | ------------------------------------------------------------------------------- |
| `conversation_id` | UUID | The Conversation record ID. |
| `session_id` | string | Channel-prefixed: `embed-…`, `wa_…`, `tg_…`. |
| `channel` | string | Inferred from `session_id` prefix: `web`, `whatsapp`, `telegram`, or `unknown`. |
| `escalated_at` | string | ISO 8601 timestamp of the escalation. |
Web escalations may include an additional `message_count` field; WhatsApp / Telegram escalations don't. Treat any field beyond the four above as optional and channel-specific.
## Headers
Every webhook request carries:
| Header | Value |
| ------------------------ | --------------------------------------------------------------------------------------- |
| `Content-Type` | `application/json` |
| `X-InsiteChat-Signature` | HMAC-SHA256 of the raw request body, hex-encoded — use this to verify authenticity |
| `X-InsiteChat-Event` | The event name (also present in the body's `event` field) — convenient for fast routing |
| `User-Agent` | `InsiteChat-Webhook/1.0` |
## Signature Verification
Every payload is signed with HMAC-SHA256 using the per-webhook secret you'll see when you create or view the webhook in the dashboard. Always verify the signature before trusting the body.
### Python
```python theme={null}
import hmac
import hashlib
def verify_signature(payload_bytes: bytes, signature: str, secret: str) -> bool:
expected = hmac.new(secret.encode(), payload_bytes, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, signature)
```
### Node.js
```javascript theme={null}
const crypto = require('crypto');
function verifySignature(payloadBuffer, signature, secret) {
const expected = crypto
.createHmac('sha256', secret)
.update(payloadBuffer)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(expected),
Buffer.from(signature),
);
}
```
Verify against the **raw request bytes**, not the parsed JSON. Re-serializing changes whitespace and breaks the signature. Most frameworks expose a `req.rawBody` or `request.body()` (bytes) helper.
## Retry Policy
A delivery is **failed** if the response is non-2xx or the request times out (10 seconds). Failed deliveries are retried up to 3 times with fixed backoff:
| Attempt | Delay after previous failure |
| --------- | ---------------------------- |
| 1st retry | 1 minute |
| 2nd retry | 5 minutes |
| 3rd retry | 15 minutes |
After the 3rd failed retry the delivery is marked permanently failed.
## Delivery Log
Every webhook attempt is logged. Open **Dashboard** → your chatbot → **Webhooks**, click **Delivery log** on any webhook to see status code, response body, and retry attempts.
# Changelog — Latest Features & Updates
Source: https://docs.insitechat.ai/changelog/overview
Every InsiteChat release, feature ship, and notable improvement — in reverse chronological order. Updated continuously.
## April 22, 2026
### Reply from the Dashboard (V1)
Take over an escalated conversation and reply to the visitor **without leaving InsiteChat** — works for the web widget, WhatsApp, *and* Telegram.
* New composer in the **Human Support** dashboard ships replies back over the originating channel
* Web widget polls every 4s for new agent messages and renders them with a green accent + "A human has joined the chat" system bubble (one-time)
* WhatsApp + Telegram dispatch reuses the existing `_send_text` / `_send_message` helpers — replies arrive in seconds
* New `Message.Role.AGENT` role + `sent_by_user_id` FK for full attribution; agent replies do **not** count against your monthly LLM message quota
* WhatsApp 24-hour reply window is enforced with a structured 422 error so you see the failure inline
* "Hand back to AI" button + live mute countdown chip in the dashboard
### Smart Handoff Intent Detection
Visitors don't always say "talk to a human" verbatim — now they don't have to.
* **Multilingual:** non-ASCII messages (Spanish, Hindi, Arabic, etc.) skip the keyword pre-filter and go straight to the LLM
* **LLM classifier:** Gemini 2.5 Flash Lite picks up frustration, implicit asks, and ambiguous phrasing
* **SHA-256 cached** so repeated phrases cost nothing
* **Atomic per-conversation rate-limiting** prevents spam from blowing up classifier costs
* Powers handoff on both WhatsApp and Telegram (Scale + Enterprise)
### Unified AI Mute (Rolling 24h)
Replaces the old WhatsApp-only `wa_paused:*` Redis key with a unified `agent_handling:{conv_id}` key that works across web, WhatsApp, and Telegram.
* Mute is **rolling** — every agent reply refreshes the 24h timer
* Auto-resumes the AI if the agent stops replying for 24h
* Cleared instantly on **Mark resolved** or **Hand back to AI**
### Unified Escalation Webhook
The `conversation.escalated` event now fires for **every channel** (was web-only), with one new field:
* **`channel`** — inferred from the `session_id` prefix: `web` / `whatsapp` / `telegram` / `unknown`
Existing webhook handlers continue to work; new ones can route on `data.channel`.
***
## April 2026
### Persona Library Expansion
The persona picker grew from 5 built-ins to **13** — Default, Default (Classic), Neutral, Professional / Formal, Informative, Engaging, Inspirational, Playful / Funny, Sales Expert, Consultant, Problem Solver, Urgent & Action-Oriented, Empathetic Support — plus a **Custom** option for hand-written instructions. Switch personas without retraining.
### WhatsApp Cloud API (BYOK)
Deploy your chatbot on WhatsApp using **your own** Meta Business credentials — no per-message markup, no reseller middleman.
* Bring your own App ID, Phone Number ID, WABA ID, and permanent access token
* InsiteChat validates against Meta's API at connect time
* Same RAG pipeline as web chat; messages count against your monthly quota only
* Read receipts, conversation history, plan-quota enforcement, deduplication on Meta `message_id`
### OneDrive + SharePoint Backend (UI Coming Soon)
Microsoft Graph integration is live in the backend — OAuth, file picker API, and ingestion all work end-to-end. The dashboard picker UI is rolling out shortly; contact support to enable manually in the meantime.
### Live Chat Integrations
* **Crisp** — AI auto-reply for Crisp live chat
* **Freshchat** — AI first-line support for Freshworks
* **Zendesk Chat** — AI-powered ticket replies
### CRM & Automation
* **HubSpot CRM** — Auto-sync captured leads to HubSpot contacts
* **Zapier** — Outgoing webhooks with HMAC-SHA256 signing, 3 retries
* **Slack** — Real-time notifications for leads, conversations, escalations
### Channels
* **Telegram Bot** — Deploy chatbot as a Telegram bot with full RAG pipeline
* **WordPress Plugin** — Install and paste Chatbot ID, no coding needed
* **Shopify App** — Theme App Extension for Shopify stores
### Infrastructure
* **Flower Dashboard** — Celery monitoring on port 5555
* **Webhook System** — Outgoing webhooks with delivery log and retry
* **Shared Chat Helper** — Unified RAG pipeline with billing enforcement across all channels
### Security
* Moved all Docker secrets to .env file references
* Rotated all exposed API keys
* SSRF protection in web crawler
* Email rate limiting, file upload validation, API key rate limits
***
## March 2026
### Launch
* Initial release of InsiteChat.ai
* RAG pipeline: crawl, chunk, embed (OpenAI/Gemini), hybrid search (vector + BM25 with RRF fusion)
* Google Drive, Notion, Dropbox integrations
* Embed widget with branding customization
* Lead capture and escalation to human
* Plans: Free, Starter ($15/mo), Growth ($30/mo), Scale (\$150/mo)
* Razorpay payments (INR)
# InsiteChat vs Chatbase — Honest Comparison (2026)
Source: https://docs.insitechat.ai/compare/chatbase
InsiteChat vs Chatbase compared on pricing, features, India support, integrations, and retrieval quality. Where each wins and how to pick.
## TL;DR
**Chatbase** is a well-funded US-based AI chatbot platform that popularized the "train on your docs" category. Strong brand, strong product, USD-only pricing, features paywalled aggressively.
**InsiteChat** is a leaner platform built for the same use case with a different philosophy: full features on every plan (including Free), native Indian pricing in ₹, WhatsApp BYOK, and hybrid retrieval. Where Chatbase paywalls a feature, InsiteChat usually doesn't.
You should pick **Chatbase** if you want the most established brand and your team is US-based with no budget sensitivity.
You should pick **InsiteChat** if you want lower total cost, native INR billing, WhatsApp Business, Hindi/Hinglish support, or hybrid retrieval for technical/India-specific content.
## Feature comparison
| | **InsiteChat** | Chatbase |
| ------------------------------------ | --------------------------------- | ----------------- |
| **Starting price** | **₹0 / \$0** forever | \$19 / mo (Hobby) |
| **Free plan?** | ✅ Real Free, full features | ⚠️ Limited |
| **India pricing (INR)** | ✅ Native ₹ billing | ❌ USD only |
| **Lead capture on Free** | ✅ | ❌ Paid |
| **CSV export on Free** | ✅ | ❌ Paid |
| **WhatsApp Business** | ✅ BYOK | ⚠️ Add-on |
| **Hindi/Hinglish UI** | ✅ | ❌ |
| **Custom branding (remove badge)** | ✅ Growth plan | ✅ Standard plan |
| **HubSpot integration** | ✅ on Free | ✅ Paid |
| **Slack integration** | ✅ | ✅ |
| **Google Drive / Notion / Dropbox** | ✅ All 3 on Free | ✅ Paid |
| **Hybrid retrieval (vector + BM25)** | ✅ | ⚠️ Vector-only |
| **Multilingual** | ✅ 95+ languages incl. Hindi | ✅ 90+ languages |
| **API access** | ✅ Scale plan | ✅ Top tier |
| **Embed widget** | ✅ Highly customizable | ✅ |
| **Conversation transcripts** | ✅ on every lead | ✅ |
| **Q\&A pair priority** | ✅ Custom Q\&A overrides retrieval | ✅ |
## Where Chatbase wins
Honestly:
* **Brand recognition** — Chatbase is the category's brand of record. If you tell a US prospect "we use Chatbase," they nod. InsiteChat is newer and less recognized outside India.
* **VC-backed runway** — Chatbase raised funding to build the product. They've shipped more iterations than InsiteChat over the same period.
* **Marketing surface area** — more blog content, more YouTube tutorials, more "Chatbase X" YouTube reviewers. Easier to learn-by-osmosis.
* **Established Reddit/Twitter community** — easier to find peer answers to obscure questions.
## Where InsiteChat wins
* **Cost** — For an Indian customer, InsiteChat Growth at ₹2,847/mo (\~$34/mo) gives you 10,000 messages, 2 chatbots, 4 team members, custom branding, weekly auto-sync. Chatbase Standard at $40/mo gives you 2 chatbots and 4,000 messages. InsiteChat's Growth is **2.5× the messages at a lower price**.
* **Free plan is actually usable** — InsiteChat's Free has lead capture, CSV export, all integrations, no per-conversation paywall. Chatbase's Free is mostly a trial.
* **India support** — INR billing, GST invoicing, UPI payments via Razorpay, Hindi/Hinglish UI translations. Chatbase will charge your card in USD with a 2-3% forex markup.
* **WhatsApp BYOK** — bring your own Meta credentials and pay Meta directly with no per-message markup. Chatbase routes WhatsApp through their own number and charges a margin.
* **Hybrid retrieval** — vector + keyword + Reciprocal Rank Fusion. Catches edge cases (error codes, brand names, currency symbols, GST numbers) that vector-only systems miss. See [hybrid search](/concepts/hybrid-search).
* **Source citations on every answer** — clickable link back to the page the answer came from. Chatbase does this too; just confirming InsiteChat doesn't skip it.
## Specific scenarios
### "I'm an Indian SaaS startup with limited budget"
**Pick InsiteChat.** No-brainer. INR pricing alone saves you 10-15% over the year, and the Free plan can carry you while you find product-market fit.
### "I need a chatbot in 30 minutes and don't care which platform"
Either works. Both will ship in 30 minutes. InsiteChat is cheaper from minute 31 onwards.
### "I run a US D2C ecommerce store on Shopify"
Probably Chatbase or **Tidio** — Tidio has deeper Shopify hooks. InsiteChat works fine but you'll feel a slightly less e-com-native experience.
### "My team is technical and we want to extend the chatbot via API"
InsiteChat's Scale plan includes full REST API at \$199/mo. Chatbase's API is also at their top tier. Roughly comparable; pick whichever has the better default features for you.
### "I sell to enterprise and need SOC 2 Type II"
Today, **Chatbase** has the more mature compliance story. InsiteChat is working on it.
## Migration path
If you're currently on Chatbase and want to switch:
1. Export your chatbot's content (Chatbase supports a basic export).
2. Sign up at InsiteChat Free.
3. Add your sources — Chatbase exports are usually a mix of website URLs and uploaded PDFs, both of which InsiteChat ingests.
4. Recreate your system prompt and Q\&A pairs (we have 6 templates that probably match your existing tone).
5. Update the embed code on your website (5 minutes).
6. Cancel Chatbase.
Most teams migrate in under an hour. Email **[support@insitechat.ai](mailto:support@insitechat.ai)** if you want help.
## Learn more
* [InsiteChat vs SiteGPT](/compare/sitegpt)
* [InsiteChat vs Tidio](/compare/tidio)
* [Full alternatives list](/alternatives)
* [Why hybrid retrieval matters](/concepts/hybrid-search)
* [InsiteChat pricing](/plans-and-pricing)
# InsiteChat vs Chatbase, SiteGPT, Tidio
Source: https://docs.insitechat.ai/compare/index
Honest comparison of InsiteChat vs Chatbase, SiteGPT, and Tidio — pricing, features, India support, integrations. Pick the right AI chatbot for your team.
## Pick the right AI chatbot for your team
The AI chatbot category has grown fast and there are real differences between the major platforms. This page is an honest side-by-side so you can decide. We pull no punches on where competitors win and where InsiteChat wins.
| | **InsiteChat** | Chatbase | SiteGPT | Tidio |
| ------------------------------------ | ------------------------ | -------------- | -------------- | ---------------------- |
| **Free plan** | ✅ Forever, full features | ⚠️ Limited | ❌ 7-day trial | ⚠️ 50 conversations/mo |
| **Pricing starts at** | **₹0 / \$0** | \$19 / mo | \$49 / mo | \$29 / mo |
| **India pricing (INR)** | ✅ Native ₹ billing | ❌ USD only | ❌ USD only | ❌ USD only |
| **Hindi/Hinglish UI** | ✅ Full | ❌ | ❌ | ❌ |
| **WhatsApp Business** | ✅ BYOK (no markup) | ⚠️ Add-on | ❌ | ✅ Built-in |
| **Lead capture on Free** | ✅ | ❌ Paid | ❌ | ⚠️ Limited |
| **CSV export on Free** | ✅ | ❌ Paid | ❌ Paid | ⚠️ |
| **HubSpot integration** | ✅ Free | ✅ Paid | ✅ Paid | ✅ Paid |
| **Custom branding** | ✅ from Growth | ✅ Paid | ✅ Paid | ✅ Paid |
| **API access** | ✅ Scale plan | ✅ Top tier | ✅ Top tier | ✅ Top tier |
| **Hybrid retrieval (vector + BM25)** | ✅ | ⚠️ Vector-only | ⚠️ Vector-only | ⚠️ Vector-only |
| **Multiple data sources** | ✅ 8+ | ✅ 5 | ✅ 4 | ✅ 3 |
[See full comparison pages →](/compare/chatbase)
## Quick recommendations by use case
| If you are… | Best pick | Why |
| -------------------------------------------- | ---------------------- | ---------------------------------------------------------------------------------- |
| **An Indian SaaS startup** | **InsiteChat** | Only platform with native INR billing, Hindi support, and a useful Free plan |
| **A US/EU enterprise** | InsiteChat or Chatbase | Pricing competitive; InsiteChat wins if you need WhatsApp BYOK or hybrid retrieval |
| **A live-chat-heavy shop with agents** | Tidio | Live chat is Tidio's bread and butter; AI is a recent add-on |
| **A docs-heavy SaaS** | InsiteChat or SiteGPT | Both index docs well; InsiteChat is dramatically cheaper |
| **An e-commerce store** | Tidio or InsiteChat | Tidio has deeper Shopify hooks; InsiteChat is cheaper and adds WhatsApp |
| **A developer building custom integrations** | InsiteChat | Scale plan includes full REST API; competitors gate API at top tiers |
## When NOT to pick InsiteChat
Honest advice: InsiteChat is not always the right answer.
* **You need a mature human live-chat product** — InsiteChat focuses on AI chatbots; we route to your existing live-chat tool (Crisp, Freshchat, Zendesk) rather than competing with them. If your team has 20+ agents and live chat is the primary experience, Tidio or Intercom are built for that.
* **You need voice / phone bots** — InsiteChat is chat-only today.
* **You need on-premise deployment** — InsiteChat is SaaS. Self-hosted is on the long-term roadmap, not shipping.
* **Your buying process requires SOC 2 Type II** — we are working on it but not yet certified. Enterprise customers should ask us about timelines.
## Detailed comparisons
* [InsiteChat vs Chatbase](/compare/chatbase) — feature parity, price gap, Indian market story
* [InsiteChat vs SiteGPT](/compare/sitegpt) — both started as docs chatbots; how they differ today
* [InsiteChat vs Tidio](/compare/tidio) — AI chatbot vs live-chat-with-AI-bolted-on
* [Full alternatives list](/alternatives) — every credible competitor in the AI chatbot category
## Talk to us
If you're evaluating InsiteChat against a specific competitor not listed here, email **[support@insitechat.ai](mailto:support@insitechat.ai)** and we'll send you an honest comparison. We won't trash competitors — we'll just tell you when they're the better fit and when we are.
# InsiteChat vs SiteGPT — Honest Comparison (2026)
Source: https://docs.insitechat.ai/compare/sitegpt
InsiteChat vs SiteGPT compared on pricing, features, India support, integrations, and retrieval quality. Where each wins and how to pick.
## TL;DR
**SiteGPT** is one of the original "train a chatbot on your website" tools. Mature product, US/UK focused, no free plan (only a 7-day trial), starts at \$49/month.
**InsiteChat** is a newer alternative built for the same core use case with a different pricing philosophy: forever-Free plan, native INR billing, full feature parity on Free, hybrid retrieval, and Hindi/Hinglish localization.
Pick **SiteGPT** if you've been on it for years and the migration cost outweighs the price difference, or if you have a specific SiteGPT integration that we don't support yet.
Pick **InsiteChat** for everything else — lower cost, free plan that's actually usable, INR billing, WhatsApp Business via BYOK, and better retrieval quality on technical content.
## Feature comparison
| | **InsiteChat** | SiteGPT |
| ------------------------------------ | --------------------- | ------------------- |
| **Starting price** | **₹0 / \$0** forever | \$49 / mo (Starter) |
| **Free plan?** | ✅ Real Free | ❌ 7-day trial |
| **India pricing (INR)** | ✅ Native ₹ billing | ❌ USD only |
| **Lead capture on Free** | ✅ | n/a — no Free plan |
| **CSV export** | ✅ on Free | ✅ Paid |
| **WhatsApp Business** | ✅ BYOK (Growth+) | ❌ |
| **Hindi/Hinglish UI** | ✅ | ❌ |
| **Custom branding** | ✅ Growth plan | ✅ Starter plan |
| **HubSpot integration** | ✅ Free | ⚠️ Via Zapier |
| **Slack notifications** | ✅ Free | ✅ Paid |
| **Telegram integration** | ✅ | ⚠️ Via Zapier |
| **Google Drive / Notion / Dropbox** | ✅ All 3 | ⚠️ Notion only |
| **Hybrid retrieval (vector + BM25)** | ✅ | ⚠️ Vector-only |
| **Multilingual** | ✅ 95+ languages | ✅ Many languages |
| **API access** | ✅ Scale plan | ✅ Top tier |
| **Embed widget** | ✅ Highly customizable | ✅ |
## Where SiteGPT wins
Honestly:
* **Maturity** — SiteGPT has been in market longer and the product has more rounded edges in the long-tail use cases.
* **Brand recognition in the US/UK** — established name; if your team Googles "AI chatbot from website" SiteGPT is in the first page of results.
* **Native English content depth** — their docs and blog cover English-language use cases extensively.
## Where InsiteChat wins
* **A free plan that does real work** — SiteGPT only offers a 7-day trial. InsiteChat's Free plan supports 1 chatbot, 200 messages/mo, 30 pages of content, lead capture, CSV export, HubSpot sync, all integrations. You can run a small business on Free.
* **Massive price gap** — InsiteChat Starter at $29/mo gives you 4,000 messages and 1,000 pages. SiteGPT Starter at $49/mo gives you 5,000 messages and 1 chatbot. Per-message, InsiteChat is \~50% cheaper.
* **India pricing in ₹ with GST invoices** — SiteGPT charges USD only. Indian businesses pay forex markup and have to deal with GST manually. InsiteChat handles it natively.
* **WhatsApp Business via BYOK** — bring your own Meta credentials, pay Meta directly. SiteGPT does not currently ship WhatsApp.
* **More native data integrations** — InsiteChat ships Google Drive + Notion + Dropbox natively. SiteGPT supports Notion natively; for Drive/Dropbox you need Zapier (extra cost, more brittle).
* **Hybrid retrieval** — vector + keyword + Reciprocal Rank Fusion catches edge cases that vector-only systems miss (error codes, currency symbols, GST numbers, brand names). See [hybrid search](/concepts/hybrid-search).
* **Hindi + Hinglish localization** — fully translated widget UI. Useful for the Indian SMB market.
## Specific scenarios
### "I'm a US/UK SaaS that just needs a docs chatbot"
Either works. SiteGPT is more established; InsiteChat is cheaper. If you only care about English and don't care about India support, the choice comes down to brand preference and budget.
### "I'm an Indian SaaS, Indian agency, or India-serving business"
**Pick InsiteChat.** SiteGPT has no India story — USD only, no Hindi, no WhatsApp. InsiteChat was built with the Indian market as a first-class concern.
### "I need WhatsApp Business integration"
**Pick InsiteChat.** SiteGPT doesn't ship WhatsApp. InsiteChat's WhatsApp BYOK lets you bring your own Meta credentials and pay Meta directly — no per-message markup.
### "I'm a developer who wants to extend via API"
Both gate API at top tier. InsiteChat's Scale is \$199/mo, SiteGPT's top tier is similar. Roughly comparable.
### "My content is technical / has lots of code, error codes, version numbers"
**Pick InsiteChat.** Hybrid retrieval handles exact-string matches (error codes, version strings, function names) more reliably than vector-only. SiteGPT's vector-only retrieval will sometimes miss precise technical lookups.
## Migration path from SiteGPT
If you're currently on SiteGPT and want to switch:
1. Sign up for InsiteChat (Free plan, no credit card).
2. Note your SiteGPT chatbot's system prompt — InsiteChat has 6 templates; one will be close to your current setup.
3. Add the same source URLs to InsiteChat — our crawler indexes the same content.
4. Recreate any custom Q\&A pairs (typically 10-30 of these for most teams).
5. Update embed code on your website.
6. Run both in parallel for a week, compare a few questions.
7. Cancel SiteGPT.
Migration takes 30-60 minutes for most teams. Email **[support@insitechat.ai](mailto:support@insitechat.ai)** for migration help.
## Learn more
* [InsiteChat vs Chatbase](/compare/chatbase)
* [InsiteChat vs Tidio](/compare/tidio)
* [Full alternatives list](/alternatives)
* [Why hybrid retrieval matters](/concepts/hybrid-search)
* [InsiteChat pricing](/plans-and-pricing)
# InsiteChat vs Tidio — AI Chatbot Comparison (2026)
Source: https://docs.insitechat.ai/compare/tidio
InsiteChat vs Tidio: AI-first chatbot vs live-chat-with-AI-bolted-on. Compare pricing, features, India support, and which fits your business.
## TL;DR
**Tidio** is a 10+ year-old live chat platform that recently added AI chatbot features. Strong human live chat, deep Shopify integration, USD pricing, AI is a relatively recent add-on.
**InsiteChat** is an AI-first chatbot platform built from the ground up around retrieval-augmented generation. The AI is the primary product, not a feature bolted onto a live-chat tool.
Pick **Tidio** if human live chat is the core experience for your team and AI is a secondary capability — Tidio's live chat product is more mature.
Pick **InsiteChat** if AI is your primary use case, if you want to spend less per month, if you need India support (INR, Hindi, WhatsApp BYOK), or if your content is technical and benefits from hybrid retrieval.
## The fundamental difference
Tidio's product evolution:
1. **Live chat for websites** (2013) — connect human agents to website visitors
2. **Chatbot builder** (2018) — drag-and-drop scripted flows ("If user says X, bot replies Y")
3. **AI chatbot ("Lyro")** (2023) — recent add-on that does RAG-style answers
InsiteChat's product evolution:
1. **AI chatbot trained on your content** (day one)
2. **Live chat handoff integrations** — InsiteChat routes to Crisp, Freshchat, or Zendesk when humans are needed
Both products converge on "AI chatbot with optional human handoff" but from opposite directions. The maturity of each layer reflects which started first.
## Feature comparison
| | **InsiteChat** | Tidio |
| ------------------------------------ | ---------------------------------------- | --------------------------------- |
| **Starting price** | **₹0 / \$0** forever | \$29 / mo (Starter) |
| **Free plan** | ✅ Real Free, full features | ⚠️ 50 conversations/mo, AI capped |
| **India pricing (INR)** | ✅ Native ₹ billing | ❌ USD only |
| **Primary product** | AI chatbot | Live chat + AI add-on |
| **Live chat with human agents** | ⚠️ Via Crisp/Freshchat/Zendesk handoff | ✅ Native, mature |
| **Mobile apps for agents** | ❌ (use the handoff partner's app) | ✅ iOS + Android |
| **AI chatbot quality** | ✅ Hybrid retrieval, custom Q\&A priority | ✅ Lyro (vector-only) |
| **WhatsApp Business** | ✅ BYOK (no markup) | ✅ Built-in (their margin) |
| **Hindi/Hinglish UI** | ✅ | ❌ |
| **Lead capture on Free** | ✅ | ⚠️ Limited |
| **Custom branding** | ✅ Growth plan | ✅ Paid |
| **HubSpot integration** | ✅ on Free | ✅ Paid |
| **Shopify integration** | ✅ App | ✅ Deep native |
| **Hybrid retrieval (vector + BM25)** | ✅ | ❌ Vector-only |
| **Multilingual** | ✅ 95+ languages | ✅ |
| **API access** | ✅ Scale plan | ✅ Top tier |
| **Q\&A pair priority** | ✅ Override retrieval | ⚠️ Less granular |
## Where Tidio wins
Honestly:
* **Mature live chat** — if you have a team of agents staffing live chat, Tidio's tooling for them (mobile apps, agent inboxes, canned responses, agent metrics) is more polished than what InsiteChat ships natively.
* **Shopify-native** — Tidio has been on the Shopify App Store for years and integrates deeply with cart, order, customer data.
* **Brand recognition** — 10+ years in market, broad SMB awareness, established Help center.
## Where InsiteChat wins
* **Cost** — InsiteChat Growth at ₹2,847/mo (\~$34/mo) gives you 10,000 AI messages, 2 chatbots, 4 team members, custom branding. Tidio's comparable tier with AI is $59-99/mo with similar message caps.
* **A Free plan that does real work** — InsiteChat's Free has full features. Tidio's Free caps AI conversations to a trial-level volume.
* **India support** — INR billing, GST invoices, Hindi/Hinglish UI, WhatsApp BYOK with no markup. Tidio charges USD and routes WhatsApp through their own margin.
* **Hybrid retrieval** — InsiteChat's vector + BM25 with Reciprocal Rank Fusion catches edge cases that Tidio's vector-only Lyro can miss. Especially relevant for technical content, error codes, GST numbers, and brand names. See [hybrid search](/concepts/hybrid-search).
* **AI quality on docs-heavy use cases** — InsiteChat was designed for "answer from your docs" from day one. Tidio's Lyro is newer and treats AI as a feature, not the foundation.
* **Q\&A pair override** — InsiteChat lets you define custom Q\&A pairs that always take priority over retrieved content. Critical for pricing, refund policy, and other high-stakes answers.
## Specific scenarios
### "I run an e-commerce store with 1-3 agents staffing live chat"
**Pick Tidio.** Their live-chat product is more polished and Shopify integration is deeper. InsiteChat works fine but you'll miss the agent tooling.
### "I run a SaaS, docs-heavy product, no human support team"
**Pick InsiteChat.** AI-first, hybrid retrieval, cheaper. Tidio's strengths (live chat, Shopify) don't apply.
### "I'm an Indian agency selling to Indian SMBs"
**Pick InsiteChat.** INR billing, Hindi, WhatsApp BYOK without margin. Tidio has none of these.
### "I want AI to handle 80% of conversations, humans only for the hard 20%"
Either works. InsiteChat's [handoff integrations](/deployment/human-support) route to Crisp/Freshchat/Zendesk when needed — you keep the human tool you already have. Tidio offers AI + human in one product, which is simpler but more expensive.
### "I have a tight budget and need to start free"
**Pick InsiteChat.** Tidio's Free is a trial; InsiteChat's Free is a forever plan with full features.
## Migration path from Tidio
If you're using Tidio mostly for AI / chatbot (not human live chat):
1. Sign up for InsiteChat (Free).
2. Export your knowledge base content (Tidio supports an export).
3. Add the same sources to InsiteChat.
4. If you want human handoff, connect [Crisp](/integrations/crisp), [Freshchat](/integrations/freshchat), or [Zendesk](/integrations/zendesk-chat).
5. Update embed code on your website.
6. Cancel Tidio (or downgrade if you still need human live chat).
If you genuinely depend on Tidio's live chat product with multiple human agents, the migration is more involved. Email **[support@insitechat.ai](mailto:support@insitechat.ai)** and we'll walk through it.
## Learn more
* [InsiteChat vs Chatbase](/compare/chatbase)
* [InsiteChat vs SiteGPT](/compare/sitegpt)
* [Full alternatives list](/alternatives)
* [Live chat handoff integrations](/deployment/human-support)
* [InsiteChat pricing](/plans-and-pricing)
# What are Embeddings?
Source: https://docs.insitechat.ai/concepts/embeddings
Embeddings turn text into vectors so a chatbot can find semantically similar passages. Plain-English explanation + how InsiteChat uses embeddings.
## Definition
**An embedding is a list of numbers (a vector) that represents the meaning of a piece of text.** Two texts with similar meaning produce vectors that are close together in vector space; two unrelated texts produce vectors that are far apart.
Embeddings are the foundation of modern semantic search and [retrieval-augmented generation (RAG)](/concepts/what-is-rag) — they let a computer find content that *means* what the user asked, even when the exact words don't match.
## How embeddings work
An embedding model is a neural network trained to compress the meaning of any sentence, paragraph, or document into a fixed-length vector — typically 384, 768, or 1,536 numbers. The training objective is simple: similar sentences should produce vectors that are mathematically close (low cosine distance), and dissimilar sentences should produce vectors that are far apart.
Once content is embedded, finding relevant passages becomes a math problem: given a question vector, find the K stored vectors with the smallest distance. This is fast even at scale — modern [vector databases](/concepts/vector-databases) can search millions of vectors in milliseconds.
## Example
Imagine these three sentences become embeddings:
* "How do I cancel my subscription?" → `[0.21, -0.04, 0.81, ...]`
* "Where can I close my account?" → `[0.19, -0.06, 0.79, ...]`
* "What is your refund policy?" → `[-0.11, 0.42, 0.05, ...]`
The first two vectors are nearly identical (close in vector space) even though they share **zero** common keywords. A keyword search would miss this match entirely. An embedding-based search catches it instantly.
## How InsiteChat uses embeddings
When you add content to InsiteChat, this happens behind the scenes:
1. **Chunking**: Long documents are split into 512-token chunks with 50-token overlap.
2. **Embedding**: Each chunk is passed through a modern multilingual embedding model.
3. **Storage**: The vectors are stored in a dedicated vector store, indexed for fast nearest-neighbor search.
4. **Search at query time**: A visitor's question is embedded with the same model and matched against the stored vectors.
InsiteChat's embedding model supports 95+ languages including English, Hindi, Spanish, French, Arabic, Mandarin, and Japanese. A visitor can ask in Hindi and match content originally written in English — the embeddings capture meaning, not surface form.
## Why embeddings alone aren't enough
Pure embedding-based search is excellent for paraphrase matching but weaker on:
* **Proper nouns and product names** ("Vercel", "GST", "Shopify") — these embed close to many other tech terms
* **Numbers and codes** ("error 429", "\$199", "v2.1") — semantic models treat these as noise
* **Rare terminology** specific to your industry
InsiteChat solves this by combining embeddings with **keyword (BM25) search** and fusing results via Reciprocal Rank Fusion — see [Hybrid search](/concepts/hybrid-search) for details.
## Learn more
* [What is RAG?](/concepts/what-is-rag) — the bigger picture
* [Hybrid search](/concepts/hybrid-search) — why InsiteChat doesn't rely on embeddings alone
* [Vector databases](/concepts/vector-databases) — where embeddings are stored
# What is Hybrid Search?
Source: https://docs.insitechat.ai/concepts/hybrid-search
Hybrid search combines semantic (vector) search with keyword (BM25) search and merges results via Reciprocal Rank Fusion. How InsiteChat uses it for more accurate chatbot answers.
## Definition
**Hybrid search combines two complementary retrieval methods — semantic (vector) search and keyword (BM25) search — and merges their results into a single ranked list.** It is the standard retrieval strategy for production-grade [RAG](/concepts/what-is-rag) systems because pure vector search has known weaknesses that keyword search fills, and vice versa.
InsiteChat uses hybrid search with Reciprocal Rank Fusion (RRF) to retrieve content for every chatbot answer.
## Why one method alone isn't enough
### Semantic (vector) search
Good at:
* Paraphrase matching ("cancel my plan" → "close my subscription")
* Cross-lingual matching ("price in rupees" → English pricing page)
* Conceptual queries that don't share keywords with the source
Weak at:
* Proper nouns and brand names (everything looks "similar" to a tech term)
* Numeric codes, error messages, version numbers
* Rare industry-specific jargon the embedding model wasn't trained on
### Keyword (BM25) search
Good at:
* Exact matches on proper nouns, product names, error codes
* Numeric and code lookups ("HTTP 429", "₹1,424/mo")
* Rare terminology specific to your industry
Weak at:
* Paraphrases (the user's words must overlap with the source)
* Synonyms ("car" vs "vehicle")
* Cross-lingual queries
### The fix: run both, fuse the results
If you run both methods independently and intelligently merge the rankings, you get the strengths of each and few of the weaknesses.
## Reciprocal Rank Fusion (RRF)
RRF is a simple, effective algorithm to combine two ranked lists. For each item, its RRF score is:
```
RRF_score(item) = 1 / (k + rank_vector) + 1 / (k + rank_keyword)
```
Where `k` is a small constant (60 is standard) and `rank_x` is the item's position in each ranked list. Items that appear high in *either* list get a high combined score. Items that appear in both lists get the highest scores of all.
The beauty of RRF is that it requires no tuning of weights between vector and keyword scores — only ranks matter — which makes it robust across very different query types.
## How InsiteChat uses hybrid search
Every chatbot query in InsiteChat runs through this pipeline:
1. **Embed the question** with the same model used to embed your content.
2. **Vector search** over your indexed chunks for semantic similarity (top 20).
3. **BM25 search** over the same chunks for keyword overlap (top 20).
4. **Reciprocal Rank Fusion** merges the two lists into a final top-K.
5. **Q\&A pair override**: if a custom Q\&A pair you defined matches with high confidence, it takes priority over both retrieval lists.
6. **LLM generation**: the top-K results are formatted into the model's context window. The LLM generates the answer.
This is why InsiteChat's answers are accurate on edge cases that trip pure-vector systems — error messages, brand names, pricing in specific currencies, exact phrases from your docs.
## Hybrid search vs vector-only competitors
Many AI chatbot platforms ship with vector-only retrieval because it is simpler to implement. The trade-off is visible in production:
| Scenario | Vector-only | Hybrid (InsiteChat) |
| -------------------------------------------- | ---------------------------- | --------------------------- |
| "What is your refund policy?" | ✅ Both work | ✅ Both work |
| "I got error 429 — what does it mean?" | ⚠️ May miss exact code match | ✅ BM25 catches "429" |
| "How much is the Growth plan in ₹?" | ⚠️ ₹ symbol may confuse | ✅ BM25 catches exact symbol |
| "GST invoice for SaaS plan" | ⚠️ "GST" may dilute meaning | ✅ BM25 ranks GST page first |
| "Cancel subscription" → "Close account" page | ✅ Vector catches paraphrase | ✅ Both methods catch it |
## Learn more
* [What is RAG?](/concepts/what-is-rag) — the full retrieval-augmented generation pipeline
* [Embeddings](/concepts/embeddings) — how text becomes vectors
* [Vector databases](/concepts/vector-databases) — storage and search at scale
# Concepts — How InsiteChat Works Under the Hood
Source: https://docs.insitechat.ai/concepts/index
InsiteChat technical foundation: RAG, embeddings, hybrid search with Reciprocal Rank Fusion, system prompts, and vector databases. Plain-English explainers.
**InsiteChat** is built on retrieval-augmented generation (RAG) with a hybrid retrieval layer. The pages below explain — in plain English — how each piece works and why we made the architectural choices we did. Read them in order if you're new to RAG; skim individually if you're evaluating specific aspects.
## The five core concepts
Retrieval-Augmented Generation — how InsiteChat grounds AI answers in your content instead of relying on the LLM's frozen pre-training. The technique that makes chatbots factually accurate.
How text becomes high-dimensional vectors that capture meaning. The foundation of semantic search — finds "cancel my subscription" matches "close my account" even though they share zero keywords.
Why InsiteChat combines vector (semantic) and BM25 (keyword) search with Reciprocal Rank Fusion. Catches edge cases — error codes, currency symbols, brand names — that vector-only systems miss.
The standing instruction that defines your chatbot's persona, tone, and refusal behavior. One small block of text controls every response. InsiteChat ships 6 templates plus persona shaping.
Where embeddings live. InsiteChat runs on pgvector — PostgreSQL with the vector extension — for single-source-of-truth storage, ACID guarantees, and sub-15ms nearest-neighbor search at scale.
## How the pieces fit together
A single query flowing through InsiteChat touches all five concepts:
1. Your content was previously chunked, **embedded**, and stored in the **vector database** at training time.
2. A visitor types a question. Their question is also **embedded**.
3. **Hybrid search** runs vector + BM25 retrieval and merges the rankings with RRF, returning the top-K most relevant chunks.
4. The retrieved chunks plus your **system prompt** plus conversation history are sent to the LLM.
5. The LLM generates an answer grounded in the retrieved context — this is **RAG**.
The whole loop runs in 1-3 seconds and produces an answer that cites the source pages it came from.
## Why these architectural choices
* **RAG over fine-tuning**: lets you update knowledge by editing content (minutes, free) instead of retraining a model (hours, expensive). See [What is RAG?](/concepts/what-is-rag) § "RAG vs fine-tuning".
* **Hybrid search over vector-only**: catches edge cases (error codes, GST numbers, ₹ symbols, technical terms) that pure semantic search misses. See [Hybrid Search](/concepts/hybrid-search).
* **pgvector over a separate vector DB**: single source of truth with chatbot config, conversations, and leads. No two-store sync problems. See [Vector Databases](/concepts/vector-databases).
* **Custom Q\&A pairs override retrieval**: precise control on high-stakes answers (pricing, refunds, hours) without losing the flexibility of RAG. See [Custom Q\&A](/training/custom-qa).
## Related operational topics
* [Website Crawler](/training/website-crawler) — how InsiteChat ingests content
* [Document Upload](/training/document-upload) — file formats, OCR, chunking
* [Syncing Content](/training/syncing-content) — keeping the chatbot current
* [Custom Q\&A](/training/custom-qa) — overriding AI-generated answers
# What is a System Prompt?
Source: https://docs.insitechat.ai/concepts/system-prompts
A system prompt is the standing instruction that defines an AI chatbot's persona, tone, and behavior. How to write effective system prompts in InsiteChat.
## Definition
**A system prompt is the standing instruction sent to a large language model before every conversation, defining the chatbot's persona, tone, knowledge boundaries, and behavior.** It is the single most important configuration in any LLM-powered chatbot — it determines how the bot introduces itself, what it refuses to do, how it handles questions it can't answer, and what voice it speaks in.
In InsiteChat, the system prompt is set per chatbot in the Instructions tab.
## What a system prompt controls
| Aspect | Example instruction |
| ----------------- | ----------------------------------------------------------------------------------------------------------- |
| **Identity** | "You are Sage, the AI assistant for Acme Dental." |
| **Tone** | "Friendly and professional. Use plain language; avoid jargon." |
| **Scope** | "Only answer questions about Acme Dental services and policies. Do not advise on legal or medical matters." |
| **Refusal style** | "If you don't know the answer, say so honestly and offer to connect the visitor with a human." |
| **Format** | "Keep answers under 3 sentences unless asked for detail. Use bullet lists for steps." |
| **Language** | "Respond in the language the visitor uses." |
| **Brand voice** | "Reference our 'patients-first' philosophy when relevant." |
## How a system prompt is used at query time
When a visitor sends a message, InsiteChat composes a prompt like this and sends it to the LLM:
```
[SYSTEM PROMPT — your standing instructions]
[RETRIEVED CONTEXT — top-K chunks from your content]
[CONVERSATION HISTORY — last N turns]
[VISITOR MESSAGE — the current question]
```
The system prompt always comes first. It governs every response — even ones that fall back to the LLM's own knowledge when retrieval fails.
## Writing an effective system prompt
InsiteChat ships with **6 pre-built templates** to save you starting from a blank page:
* **Customer Support** — friendly, helpful, escalates to humans gracefully
* **Sales** — enthusiastic, persuasive, captures leads at the right moment
* **Technical** — precise, code-aware, links to documentation
* **Education** — patient, explanatory, uses examples and analogies
* **Enterprise** — formal, compliance-aware, careful with claims
* **FAQ** — direct, factual, minimal embellishment
Each template is a starting point — edit it to match your brand. Most teams customize 3-5 sentences and ship.
### Guidelines
1. **Open with identity**: "You are \[Name], the AI assistant for \[Company]."
2. **Set tone in one line**: "Tone: warm, professional, no jargon."
3. **State scope explicitly**: "Answer questions about \[X, Y, Z]. Decline questions about \[A, B, C]."
4. **Handle the unknown**: "If you don't know, say 'I'm not sure — let me connect you with someone who can help' and trigger a lead form."
5. **Stay under 300 words** — the LLM weighs every instruction, so brevity helps.
## What system prompts cannot do
* They cannot teach the model facts about your business — that's what [RAG](/concepts/what-is-rag) is for.
* They cannot override pricing or product info encoded in retrieved content.
* They cannot fully suppress hallucinations on questions where retrieval returns nothing — for those, you need [custom Q\&A pairs](/training/custom-qa) with precise answers.
## InsiteChat's persona system
In addition to the system prompt, InsiteChat lets you pick a **persona** (Friendly, Professional, Casual, or custom) that adds tone-shaping instructions to every response. Personas are a fast way to enforce voice without rewriting the full system prompt. See [Widget customization](/deployment/customization) for the full list.
## Learn more
* [Custom Q\&A pairs](/training/custom-qa) — precise answers for high-stakes questions
* [Reply length controls](/managing/reply-length) — limit verbosity per chatbot
* [What is RAG?](/concepts/what-is-rag) — how retrieved context combines with the system prompt
# What is a Vector Database?
Source: https://docs.insitechat.ai/concepts/vector-databases
A vector database stores and searches high-dimensional embeddings. How vector databases power AI chatbots and what InsiteChat uses under the hood.
## Definition
**A vector database is a specialized data store that holds high-dimensional vectors (embeddings) and supports fast nearest-neighbor search across millions or billions of them.** It is the storage layer that makes [retrieval-augmented generation (RAG)](/concepts/what-is-rag) feasible at scale — without a vector database, finding the most relevant passages for a question would require scanning every chunk of content on every query.
Vector databases are to embeddings what traditional databases are to rows: they let you search huge collections in milliseconds, with indexes, filters, and updates.
## Why traditional databases aren't enough
Relational databases (PostgreSQL, MySQL) and document stores (MongoDB) are built for exact match, range queries, and joins on structured fields. They are not optimized for the question "which of these 10 million vectors is closest to my query vector?".
Vector databases use specialized index structures — Hierarchical Navigable Small World graphs (HNSW), Inverted File Index (IVF), Product Quantization (PQ) — to make approximate nearest-neighbor search both fast and memory-efficient.
A typical query latency on a vector database:
| Collection size | Latency (HNSW index) |
| ------------------ | -------------------- |
| 10,000 vectors | \< 1 ms |
| 100,000 vectors | 1-3 ms |
| 1 million vectors | 5-15 ms |
| 10 million vectors | 20-50 ms |
This makes vector search fast enough to run inside a chatbot's response loop without the user noticing.
## Common vector databases
* **pgvector** — a PostgreSQL extension, popular for teams already on Postgres
* **Pinecone** — fully managed, serverless, premium pricing
* **Weaviate** — open-source with managed cloud option, schema-aware
* **Qdrant** — open-source, Rust-based, fast
* **Milvus** — open-source, designed for massive scale
* **Chroma** — open-source, simple, popular for prototypes
* **Elasticsearch / OpenSearch** — added vector search to existing keyword stores
## What InsiteChat uses
InsiteChat runs on **pgvector** — PostgreSQL with the pgvector extension. This choice was deliberate:
* **Single source of truth**: chatbot config, conversations, leads, and content embeddings live in the same Postgres database. No two-store synchronization problem.
* **ACID guarantees**: deleting a source removes its vectors atomically with its metadata; no orphan vectors after partial failures.
* **Operational simplicity**: backups, replication, and monitoring use the standard Postgres toolchain.
* **Cost efficiency**: no extra managed service to pay for, no separate pricing per vector.
* **Performance at our scale**: pgvector with the HNSW index easily handles every InsiteChat customer up to tens of millions of chunks.
If we outgrow pgvector at the high end, the migration path to a dedicated store like Qdrant or Weaviate is well-documented. We have not needed it.
## How chunks become searchable
When you add a source to your chatbot in InsiteChat:
1. The crawler/uploader extracts text.
2. The text is split into chunks (512 tokens, 50-token overlap).
3. Each chunk is sent to an embedding model and the resulting vector is stored alongside the chunk text in pgvector.
4. An HNSW index is updated to make the new vectors searchable.
5. At query time, the visitor's question is embedded and the index returns the top-K nearest chunks in milliseconds.
You never interact with the vector database directly — InsiteChat's [hybrid search](/concepts/hybrid-search) layer sits in front of it and combines vector search with keyword (BM25) search for accuracy.
## Learn more
* [What is RAG?](/concepts/what-is-rag) — how retrieval and generation combine
* [Embeddings](/concepts/embeddings) — how text becomes vectors
* [Hybrid search](/concepts/hybrid-search) — why vector search alone isn't enough
* [Website crawler](/training/website-crawler) — how content gets into the vector database
# What is RAG (Retrieval-Augmented Generation)?
Source: https://docs.insitechat.ai/concepts/what-is-rag
RAG (Retrieval-Augmented Generation) combines a vector search step with an LLM to ground answers in your own content. Plain-English explanation + how InsiteChat uses it.
## Definition
**RAG (Retrieval-Augmented Generation) is a technique that lets a large language model (LLM) answer questions using information it was never trained on.** Instead of relying solely on what the LLM "knows" from pre-training, RAG retrieves relevant passages from a custom knowledge base at query time and feeds them to the model as context.
The result: factually grounded answers, fewer hallucinations, and the ability to update the chatbot's knowledge by simply updating the source content — without retraining the model.
## How RAG works (in 4 steps)
1. **Ingest**: Your content (website pages, PDFs, Google Docs, etc.) is broken into small chunks — typically 200-800 tokens each.
2. **Embed**: Each chunk is converted into a high-dimensional vector using an embedding model (e.g., OpenAI's `text-embedding-3-small`). Vectors that represent similar meaning end up close together in vector space.
3. **Retrieve**: When a visitor asks a question, the question is also embedded into a vector. The system searches for the chunks whose vectors are closest to the question's vector.
4. **Generate**: The top-N retrieved chunks are inserted into the LLM's prompt as context. The LLM generates an answer grounded in that context, optionally with citations back to the source chunks.
## Why RAG matters
Without RAG, an LLM-powered chatbot can only answer using its frozen pre-training knowledge — which is months or years out of date and has zero information about your specific product, prices, or policies. The chatbot will either decline ("I don't have access to that information") or hallucinate plausible-sounding nonsense.
With RAG, the chatbot becomes domain-aware. It can quote your refund policy verbatim, cite the exact page in your documentation, and reflect content you published yesterday.
## How InsiteChat uses RAG
InsiteChat is built on a RAG pipeline tuned specifically for chatbot use cases:
* **Chunking**: Content is split into 512-token chunks with 50-token overlap, ensuring that information spanning chunk boundaries is still retrievable.
* **Embeddings**: We use modern embedding models suitable for 95+ languages, so a Hindi question can match content originally written in English.
* **Hybrid retrieval**: InsiteChat combines vector (semantic) search with keyword (BM25) search and merges results via **Reciprocal Rank Fusion**. This catches both meaning-based matches ("how do I cancel") and exact-term matches ("invoice", "GST"). See [Hybrid search](/concepts/hybrid-search).
* **Q\&A pair priority**: Custom Q\&A pairs you define always rank above auto-extracted content, so high-stakes answers (pricing, refunds, hours) are precisely the words you intend.
* **Citations**: Every InsiteChat answer includes a link back to the source page so visitors can verify and read more.
## RAG vs fine-tuning
Many newcomers ask whether they should fine-tune an LLM on their content instead of using RAG. RAG wins for almost every business chatbot use case:
| | RAG | Fine-tuning |
| -------------------- | ------------------------------- | ------------------------------------- |
| **Update knowledge** | Re-crawl the site (minutes) | Retrain the model (hours+, expensive) |
| **Cost per change** | \~\$0 | Hundreds to thousands of dollars |
| **Citations** | Yes — natural | No — model just "knows" |
| **Hallucinations** | Lower (grounded retrieval) | Higher (knowledge becomes implicit) |
| **Compliance** | Easy to remove specific content | Hard to "unlearn" |
Fine-tuning is appropriate for changing model *behavior* (tone, format, persona) — not for adding new factual knowledge. InsiteChat handles tone via system prompts and personas without any fine-tuning required.
## Learn more
* [Embeddings](/concepts/embeddings) — how content becomes vectors
* [Hybrid search](/concepts/hybrid-search) — why semantic search alone isn't enough
* [Vector databases](/concepts/vector-databases) — where embeddings live
* [Website crawler](/training/website-crawler) — InsiteChat's content ingestion in practice
# Widget Customization — Colors, Personas, RTL, Localization
Source: https://docs.insitechat.ai/deployment/customization
Customize your InsiteChat AI chat widget — brand colors, fonts, icon, auto-open triggers, RTL languages, personas, 14-string localization, and white-label branding.
Customize every aspect of the **InsiteChat** chat widget to match your brand and user-experience needs. All customization is done from the **Embed** tab in your chatbot dashboard — brand color, fonts, icon shape, auto-open behavior, [persona](/concepts/system-prompts), language, RTL layout, and white-label watermark removal (on Growth+ plans).
## Appearance
| Setting | Description |
| --------------------- | --------------------------------------------------------------------------------------------- |
| **Brand color** | Primary color for the header, user bubbles, and send button. 9 presets or custom hex. |
| **Text color** | Color of text on colored backgrounds (header, user messages, send button). Default: white. |
| **Font size** | Base font size for the widget. Range: 12–20px. Default: 14px. |
| **Display name** | Name shown in the chat header. |
| **Greeting message** | First message visitors see. Supports markdown (bold, bullets, links). |
| **Input placeholder** | Placeholder text in the message input field. |
| **Chat icon / logo** | Upload a custom image (PNG, JPG, WebP, SVG, max 2MB) to replace the default chat bubble icon. |
## Position & icon
| Setting | Description |
| ------------------- | ------------------------------------------------------------------- |
| **Widget position** | Bottom-left or bottom-right of the page. |
| **Icon size** | Choose from S (40px), M (48px), L (56px), XL (64px), or 2XL (72px). |
| **Bottom distance** | Pixels from the bottom edge of the screen. |
| **Side distance** | Pixels from the left or right edge. |
## Auto-open
Automatically open the chat widget after a configurable delay.
| Setting | Description |
| --------------------- | --------------------------------------------- |
| **Desktop auto-open** | Toggle on/off with delay in seconds (0–60). |
| **Mobile auto-open** | Separate toggle and delay for mobile devices. |
Auto-open triggers once per browser session (uses `sessionStorage`). Visitors who manually close the widget won't see it auto-open again until they start a new session.
## Chat modes
| Mode | Behavior |
| ---------- | ------------------------------------------------------------------------------ |
| **AI** | Fully automated AI responses. Escalation button appears after 2 messages. |
| **Agent** | All messages routed to human agents via webhook. AI returns a waiting message. |
| **Hybrid** | AI responds, but "Talk to a human" button is always visible. |
## Personas
Define your chatbot's personality:
* **Default** — Neutral, helpful tone
* **Friendly** — Warm, welcoming, empathetic
* **Professional** — Formal, precise, business-appropriate
* **Casual** — Relaxed, conversational, approachable
* **Inspirational** — Enthusiastic, motivational, uplifting
* **Custom** — Write your own personality description
## RTL mode
Enable right-to-left text direction for Arabic, Hebrew, Urdu, and other RTL languages. When enabled, the entire widget layout flips — text alignment, message bubbles, and input direction all adjust automatically.
## Localization
Customize all 14 UI text strings for any language:
| String | Default | Purpose |
| ------------------ | ------------------------------------- | --------------------- |
| Status text | "Online" | Shown in the header |
| Input placeholder | "Type a message..." | Message input field |
| Escalation button | "Talk to a human" | Human handoff |
| Lead form title | "Want us to follow up?" | Lead form header |
| Lead form subtitle | "Leave your details..." | Lead form description |
| Name field | "Name" | Lead form |
| Email field | "Email \*" | Lead form |
| Phone field | "Phone" | Lead form |
| Submit button | "Submit" | Lead form |
| Submitting text | "Sending..." | Submit in progress |
| Success message | "Thanks! We'll be in touch." | After lead submit |
| Escalation success | "Sent! The team will follow up soon." | After escalation |
| Error message | "Sorry, something went wrong." | Generic error |
| Branding prefix | "Powered by" | Watermark |
## Quick prompts (starter questions & links)
Add up to **5 starter items** that appear as clickable buttons before the visitor sends their first message. Each item is one of two types:
* **Question** — clicking sends the text as a message to your chatbot.
* **Link** — clicking opens a URL in a new tab (great for pricing pages, demo bookings, or your contact form).
These reduce the "blank page" problem and guide visitors toward what matters most.
Select your chatbot and open the **Embed** tab, then switch to the **Content** sub-tab.
Scroll to **Starter Questions & Links**.
Choose **Question** or **Link** at the top of the editor.
For a question, type the question and click **Add question**. For a link, type the button label, paste the destination URL, and click **Add link**.
Click the **×** button next to any item to remove it. You can mix questions and links freely up to 5 total.
Click **Save Customization**. Starter items appear immediately in your chat widget.
Starter items appear **only before the first message**. Once the visitor sends their first message, AI-generated follow-up suggestions take over (if Smart Follow-ups are enabled).
### Recommended action items
Fewer than 3 feels under-built; more than 5 overwhelms the visitor and pushes the input field below the fold on small screens. **3 questions + 1 link** is a great starting mix for most sites.
**Good**: "How much does it cost?" or "Do you offer refunds?". **Bad**: "Pricing" or "Refund policy" (those are page titles, not questions). The closer the wording matches what a visitor would actually ask, the more natural the chip-to-conversation flow feels.
Some intents are better served by a destination than by chat — pricing pages, demo bookings, status pages, login. Use **Link** type for those so the visitor doesn't have to wait for the AI to repeat what's already on a page.
Open the **Conversations** tab weekly. If the same question keeps coming up but isn't a starter item, promote it. If a starter item never gets clicked, replace it. Starter items should reflect the *current* top intents, not what you guessed at launch.
Long button labels wrap awkwardly on narrow screens. Keep labels under \~40 characters. After saving, open the live widget on your phone to confirm everything fits — what reads cleanly on a 1440px monitor often breaks on a 375px screen.
Link starter items always open in a new tab so the visitor doesn't lose their chat session. If you need the visitor to *stay* in chat, use a **Question** instead — the AI can answer with a markdown link inline.
Pair starter items with **Smart Follow-ups** (below). Starter items handle the first click; smart follow-ups carry the conversation from there.
## Follow-up buttons (persistent ctas)
Add up to **3 buttons** that appear after **every** bot reply, not just the first message. Use these for the call-to-action you want available throughout the entire conversation. Each button is one of three types:
* **Question** — clicking sends a pre-written message to your chatbot (the message can differ from the visible label, e.g. label "See pricing" → message "What are your pricing plans?").
* **Link** — clicking opens a URL in a new tab.
* **Escalate** — clicking notifies your team and shows a custom confirmation to the visitor.
Unlike starter questions (which only appear before the first message) and smart follow-ups (which the AI invents per-reply), follow-up buttons are **operator-controlled and persistent** — visitors always see them, on every turn.
Open your chatbot's **Embed** tab and switch to the **Content** sub-tab.
Scroll past **Starter Questions & Links** to the **Follow-up Buttons** section.
Choose **Question**, **Link**, or **Escalate** at the top of the editor.
* **Question**: enter the button label and an optional message that gets sent (defaults to the label if blank).
* **Link**: enter the button label and the destination URL.
* **Escalate**: enter the button label and an optional confirmation message shown after escalating.
Click **Add**, then **Save Changes**. Repeat up to 3 buttons total. Each button shows after every bot reply in the live widget.
### When to use which
Set the visible label short ("See pricing") and the sent message specific ("What are your pricing plans for the Growth plan?"). Visitors get a tidy CTA; the AI gets a precise question. This is the cleanest way to push a conversation toward your highest-converting topics without forcing the visitor to phrase the question themselves.
Pricing page, demo booking, status page, login. The AI can summarize, but a real page is faster than a paragraph. Links open in a new tab so the chat session stays alive.
Set the confirmation message to match your real handoff time ("A specialist will reach out within 1 business day" beats the generic default). Pair this with **Lead Capture** so you actually get an email to follow up.
The first button gets the most clicks. Put your **most-converting** action first (usually book-a-demo or escalate, not "see docs"). Three buttons stay readable on mobile; four pushes the input field down too far.
Follow-up buttons are guaranteed to appear and behave the way you set them — they're operator-controlled. **Smart Follow-ups** are AI-generated and contextual to the last reply. Use both: persistent buttons for your top CTAs, smart follow-ups to keep the conversation moving on whatever the visitor just asked.
For a turn-key escalation experience — inline "Connect to an agent" CTA after every reply, multi-recipient email alerts, a dedicated triage dashboard, and analytics — see [Human Support & Escalation](/deployment/human-support).
## Smart follow-ups
When enabled, the AI generates relevant follow-up questions after each response, displayed as clickable suggestion buttons. Configure the number of suggestions (1–5).
## Source citations
Toggle to show clickable source links below bot responses, so visitors can verify answers against the original content.
## Hide feedback
Toggle off the thumbs-up / thumbs-down feedback buttons on bot messages. Useful if you prefer a cleaner interface or don't need per-message feedback.
## Watermark / branding
| Plan | Watermark behavior |
| ----------- | ---------------------------------------------- |
| **Free** | "Powered by InsiteChat.ai" — locked |
| **Starter** | "Powered by InsiteChat.ai" — locked |
| **Growth+** | Customizable text and link, or hidden entirely |
Growth and above can set a custom watermark text (e.g., "Powered by Your Company") and a custom link URL.
## Session timeout
Auto-expire conversations after a period of inactivity (0–1440 minutes). When a visitor returns after the timeout, they start a fresh conversation. Set to 0 to disable.
## Conversation history
When enabled, visitors can see and resume their past conversations via a clock icon in the header. Past sessions are stored in the visitor's browser (localStorage, max 10 sessions).
# Embed Widget — Add AI Chatbot to Any Website
Source: https://docs.insitechat.ai/deployment/embed-widget
Embed your InsiteChat AI chatbot on any website with one snippet — JavaScript, iframe, or direct link. Platform guides for WordPress, Shopify, Wix, Squarespace, Webflow.
# Embed widget
Add your InsiteChat chatbot to any website with a single embed code. The widget adds a chat icon to the corner of your page — visitors click it to open a full chat interface. No plugins or developers required.
## Getting started
Log in to InsiteChat and select the chatbot you want to deploy.
Go to the **Overview** tab. Your unique Chatbot ID is displayed with a **Copy** button. You'll need this for integrations and API calls.
Go to the **Embed** tab and choose from three options: Script tag (recommended), iFrame, or direct link.
Follow the platform-specific instructions below.
Visit your site, click the chat icon, and send a test message.
**Your Chatbot ID is required for:**
* WordPress and Shopify plugins
* API calls and developer integrations
* Webhook configuration
* Third-party platform setup
## Embed options
The script tag is the best option for most websites. It creates an iframe that automatically positions the chatbot and supports all features.
**Why choose script embed:**
* Automatic positioning based on your widget settings (left/right, icon size, distance)
* Responsive — adapts when chat opens/closes
* Supports all customization features (auto-open, RTL, personas, etc.)
* Minimal performance impact with deferred loading
**Code snippet:**
```html theme={null}
```
Replace `YOUR_CHATBOT_ID` with your actual Chatbot ID. The Embed tab provides this code pre-filled with your ID.
Use the iFrame embed when you need specific positioning or when JavaScript is restricted.
```html theme={null}
```
Adjust `width`, `height`, `bottom`, and `right` values to fit your design. Change `right` to `left` if your widget is configured for the left side.
Share your chatbot as a standalone page — useful for email signatures, QR codes, or social media bios.
```
https://insitechat.ai/embed/YOUR_CHATBOT_ID
```
Opens as a full-page chat interface. No embedding required.
## Platform-specific instructions
In your WordPress admin, go to **Plugins > Add New Plugin**. Search for a header/footer code plugin like **WPCode** or **Insert Headers and Footers**. Click **Install Now**, then **Activate**.
Go to **Code Snippets > Header & Footer** (or the plugin's settings page).
Paste the InsiteChat embed code in the **Footer** section.
Click **Save Changes**. The chatbot appears on all pages immediately.
Theme editor changes may be lost during theme updates. Use the plugin method for a safer approach.
Go to **Appearance > Theme Editor**.
Select your active theme and open `footer.php`.
Paste the embed code just before the closing `