AI Chatbot
This feature is in Prototype and will be released very soon. APIs, visual appearance, and behavior may change. Reach out to the Embeddable team if you have questions or run into issues.
Let your end-users ask questions of their data in natural language — and get back both text explanations and live charts, without ever leaving your product.
The AI Chatbot is a ready-made chat experience you drop onto the same page as your existing Embeddable dashboard. End users type a question; the chatbot queries their data, renders charts, and can even add, edit, resize, or reorder charts on their Custom Canvas on their behalf.

How it works
The AI Chatbot is made up of three pieces that work together:
<em-ai-chat-bot>— a web component you drop onto your page alongside<em-beddable>. It connects to the AI orchestrator via WebSocket and authenticates using the same embeddable tokens you already generate for your users.- AI Orchestrator — hosted by Embeddable. Receives messages from the chatbot, calls your LLM using the API key you've saved in the platform, queries your data models, and streams responses back.
- Platform LLM config — a single API call (
PUT /api/v1/llm-config) where you save your LLM provider API key. This is how you bring your own key (BYOK).
End User types a question
│
▼
<em-ai-chat-bot> (WebSocket)
│
▼
AI Orchestrator (Embeddable-hosted)
│ ├── fetches LLM API key from platform (encrypted at rest)
│ ├── queries your data models via /ai/v1/* endpoints
│ └── enforces row-level security from the embeddable token
│
▼
Response streamed back → text + rendered chartPrerequisites
Before adding the AI Chatbot you need:
- Custom Canvas enabled on your dashboard — the chatbot uses Custom Canvas datasets and templates to render charts.
- At least one dataset enabled in Custom Canvas and at least one chart template configured. The more templates you define (and the more open their inputs), the more chart types the AI can offer.
- A security token generated server-side for each end user — see the Tokens API. The chatbot uses this token exclusively for authentication; no separate chatbot credential exists.
Setup
Save your LLM API key
Register your LLM API key with the Embeddable platform. The orchestrator fetches this key fresh on every message; it is encrypted at rest and never cached.
curl -X POST https://api.eu.embeddable.com/api/v1/llm-config \
-H "Authorization: Bearer <your-workspace-api-key>" \
-H "Content-Type: application/json" \
-d '{
"provider": "anthropic"
"model": "claude-sonnett-4-0",
"apiKey": "<your-llm-api-key>"
}'provider value | Supported model values |
|---|---|
anthropic | claude-sonnet-4-0 claude-sonnet-4-5 claude-sonnet-4-6 claude-opus-4-0 claude-opus-4-1 claude-opus-4-5 claude-opus-4-6 claude-opus-4-7 claude-haiku-4-5 |
openai | gpt-4o gpt-4o-mini gpt-4.1 gpt-4.1-nano gpt-4.1-mini o1 o3 o3-mini o4-mini gpt-5 gpt-5-mini gpt-5-nano gpt-5-codex gpt-5-pro gpt-5.1 gpt-5.1-codex gpt-5.1-codex-max gpt-5.2 gpt-5.2-pro gpt-5.2-codex gpt-5.3-codex gpt-5.4 gpt-5.4-mini gpt-5.4-nano gpt-5.4-pro gpt-5.5 gpt-5.5-pro gpt-audio gpt-4o-mini-audio-preview gpt-4o-audio-preview text-embedding-3-small text-embedding-3-large text-embedding-ada-002 omni-moderation-latest |
google | gemini-2.0-flash-lite-001,gemini-2.5-pro,gemini-2.5-flash,gemini-2.5-flash-lite,gemini-3-pro-preview,gemini-3-flash-preview,gemini-embedding-001 |
openrouter | microsoft/phi-4-reasoning:free,anthropic/claude-3-opus,anthropic/claude-3-sonnet,anthropic/claude-3-haiku,anthropic/claude-3.5-sonnet,anthropic/claude-3.7-sonnet,anthropic/claude-sonnet-4,anthropic/claude-opus-4.1,anthropic/claude-haiku-4.5,anthropic/claude-sonnet-4.5,anthropic/claude-opus-4.5,anthropic/claude-sonnet-4.6,anthropic/claude-opus-4.6,anthropic/claude-3-sonnet-vision,anthropic/claude-3-opus-vision,anthropic/claude-3-haiku-vision,openai/gpt-3.5-turbo,openai/gpt-4,openai/gpt-4o,openai/gpt-4o-mini,openai/gpt-4-turbo,openai/gpt-5,openai/gpt-5-mini,openai/gpt-5-nano,openai/gpt-5-chat,openai/gpt-oss-120b,openai/gpt-5.2,openai/gpt-5.2-pro,meta-llama/llama-3-70b,meta-llama/llama-3-70b-instruct,mistralai/mistral-7b-instruct,mistralai/mixtral-8x7b-instruct,deepseek/deepseek-chat-v3-0324,google/gemini-2.5-flash-lite,google/gemini-2.5-flash,google/gemini-2.5-pro,qwen/qwen-2.5-72b-instruct,qwen/qwen3-vl-8b-instruct |
mistralai | anthropic,openai,google,openrouter,mistralai,bedrock,ollama |
bedrock | us.anthropic.claude-opus-4-20250514-v1:0,us.anthropic.claude-opus-4-1-20250805-v1:0,us.anthropic.claude-opus-4-5-20251101-v1:0,us.anthropic.claude-opus-4-6-v1,us.anthropic.claude-opus-4-7,us.anthropic.claude-sonnet-4-20250514-v1:0,us.anthropic.claude-sonnet-4-5-20250929-v1:0,us.anthropic.claude-sonnet-4-6,us.anthropic.claude-haiku-4-5-20251001-v1:0,us.amazon.nova-micro-v1:0,us.amazon.nova-lite-v1:0,us.amazon.nova-pro-v1:0,us.amazon.nova-premier-v1:0,us.meta.llama3-8b-instruct-v1:0,us.meta.llama3-70b-instruct-v1:0,us.meta.llama3-1-8b-instruct-v1:0,us.meta.llama3-1-70b-instruct-v1:0,us.meta.llama3-1-405b-instruct-v1:0,us.meta.llama3-2-1b-instruct-v1:0,us.meta.llama3-2-3b-instruct-v1:0,us.meta.llama3-2-11b-instruct-v1:0,us.meta.llama3-2-90b-instruct-v1:0,us.meta.llama3-3-70b-instruct-v1:0,amazon.titan-embed-text-v1,amazon.titan-embed-text-v2:0,cohere.embed-english-v3,cohere.embed-multilingual-v3,us.cohere.embed-v4:0,moonshot.kimi-k2-thinking,moonshotai.kimi-k2.5,minimax.minimax-m2.5,openai.gpt-oss-120b-1:0,openai.gpt-oss-20b-1:0,google.gemma-3-4b-it,google.gemma-3-12b-it,google.gemma-3-27b-it |
ollama | llama3-groq-tool-use:8b,llama3-groq-tool-use:70b,llama3.2:latest,llama3.2:3b,llama4:latest,llama4:scout,llama-guard3:latest,qwen2.5:0.5b,qwen3:0.6b,qwq:32b,qwen2.5-coder:32b,qwen3.5:9b,granite3.2-vision,deepseek-r1:1.5b,gpt-oss:20b,nomic-embed-text,all-minilm,zylonai/multilingual-e5-large,bge-large,mxbai-embed-large |
Use your Embeddable API key (not your end-user security token) as authorization to call this endpoint. This is a one-time platform configuration, not a per-user call.
Add the web component to your page
Drop <em-ai-chat-bot> onto the same page as your existing <em-beddable> component:
<em-beddable
id="my-dashboard"
token="<security-token>"
embeddable-id="<embeddable-id>"
/>
<em-ai-chat-bot
embeddable-tokens="<security-token>"
/>The embeddable-tokens attribute takes the same security token you already pass to <em-beddable>. If you render multiple embeddables on one page, pass all their tokens as a space-separated list.
The chatbot authenticates exclusively via embeddable-tokens. There is no separate chatbot token. Row-level security from the embeddable token is enforced on every data query.
Publish and test
Publish your dashboard in the builder, then open your product. The chatbot panel should appear alongside the dashboard.
Try asking a natural-language question — for example, "Show me revenue by region for last quarter". The AI will query your data and render a chart using one of your configured templates.
The end-user experience
End users interact with the chatbot in plain language. The AI can:
- Answer data questions — retrieve and summarise data from any dataset available in Custom Canvas, presented as text or charts.
- Add charts to the canvas — place new charts based on what the user asks for.
- Edit existing charts — update a chart's dataset, measure, or filters on request.
- Resize and reorder charts — rearrange the canvas layout conversationally.
- Delete charts — remove charts the user no longer needs.
All responses are scoped to the end user's security context. The orchestrator rejects connections where tokens belong to different workspaces, so there is no risk of cross-user or cross-workspace data leakage.
Security
| Concern | How it's handled |
|---|---|
| Authentication | Exclusively via the embeddable token passed in embeddable-tokens — no separate chatbot credential |
| Row-level security | Enforced on every data query using the claims in the embeddable token |
| LLM API key | Fetched fresh on every message; encrypted at rest in the platform database; never sent to the client |
| Cross-workspace isolation | The orchestrator rejects WebSocket connections where tokens belong to different workspaces |
Related
- Custom Canvas — required prerequisite; also where chatbot-created charts appear
- AI Endpoints — power your own chat UI instead of using the ready-made component
- Tokens API — how to generate the security tokens the chatbot relies on
- Row-level security — how per-user data access is enforced