Self-serve
AI Chatbot

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.

Image 0

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 chart

Prerequisites

Before adding the AI Chatbot you need:

  1. Custom Canvas enabled on your dashboard — the chatbot uses Custom Canvas datasets and templates to render charts.
  2. 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.
  3. 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 valueSupported model values
anthropicclaude-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
openaigpt-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
googlegemini-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
openroutermicrosoft/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
mistralaianthropic,openai,google,openrouter,mistralai,bedrock,ollama
bedrockus.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
ollamallama3-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

ConcernHow it's handled
AuthenticationExclusively via the embeddable token passed in embeddable-tokens — no separate chatbot credential
Row-level securityEnforced on every data query using the claims in the embeddable token
LLM API keyFetched fresh on every message; encrypted at rest in the platform database; never sent to the client
Cross-workspace isolationThe 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