Quick Start
- Create an API key in the Dashboard → Keys page.
- Create a widget in Dashboard → Widgets, or via the API:
- Embed the snippet on your site:
Customization
Appearance
Control the look of the widget via theappearance object:
primaryColor— Accent color for the widget header and buttonsposition—"bottom-right"(default) or"bottom-left"borderRadius— Corner radius in pixelsfontFamily— Custom font (loaded from Google Fonts)
Behavior
welcomeMessage— Greeting shown when the widget opensplaceholder— Input field placeholder textmaxPromptLength— Maximum characters per messageenableFileUpload— Allow users to upload images/documentsenableVoice— Enable voice input (speech-to-text)strictAbuse— Enable abuse detection heuristics (rapid-fire, content repetition, prompt-length)
Brand Soul
If the linked API key has a Brand Soul configured (via Dashboard → Keys → Brand Soul), the widget automatically inherits it. The Brand Soul defines the persona, tone, knowledge base, and behavior constraints — making the widget sound like your brand, not like a generic chatbot.Security
Domain Allowlist
ConfigureallowedOrigins on the API key to restrict which domains can embed the widget. Requests from unauthorized origins are rejected via CORS.
Bot Protection
EnablerequireTurnstile: true in the widget’s security config to add a bot-protection challenge before the first message.
Abuse Detection
WhenstrictAbuse is enabled, Theo applies server-side heuristics that flag and throttle abusive traffic patterns — including rapid-fire requests from a single IP, repetitive or duplicate content, and excessively long prompts. Exact thresholds are not published so attackers can’t calibrate around them.
