Setup guide
- Create your account and verify your email. Your workspace and your assistant are created automatically.
- Add knowledge. Give Apex your website address and it reads your pages. Add text for anything that isn't online.
- Customize the widget under Dashboard → Widget: name, colors, greeting, tone and model.
- Allow your website under Install & security. The widget only runs on the addresses listed there.
- Paste the embed code into your site and open it to test a conversation.
The Setup checklist in your dashboard tracks these steps for you.
Knowledge
Apex only answers from the content you give it. Under Dashboard → Knowledge you can add two kinds of source:
- Website. Apex reads the page you enter, your sitemap and the pages they link to on the same domain, up to the page limit. It respects
robots.txtand skips menus, footers and cookie banners. Re-sync it whenever your site changes. - Text. Paste FAQs, policies or product details that aren't on your website. Give each one a clear title; it's shown as the source of answers that use it.
When nothing in your knowledge matches a question well enough, the assistant says it doesn't know rather than guessing, and offers hand-off to your team if you've turned it on. The Answer confidence setting under Persona controls how close a match must be.
Customize
Every setting has a live preview in the widget studio. The most important ones:
| Section | What it controls |
|---|---|
| General | Bot and company name, header subtitle, default and interface language |
| Appearance | Brand color, theme, launcher icon, label and position, window width, corner radius and font |
| Messages | Greeting, suggested questions, the “I don't know” reply, disclaimer and privacy link |
| Behavior | Auto-open, teaser bubble, sources, feedback, how long chats are remembered and pages to hide on |
| AI model | Provider, model, creativity, answer depth, answer length, memory and a fallback model |
| Persona | Tone, answer length, emoji, your own instructions, topics to decline and answer confidence |
| Hand-off & leads | The email that receives hand-offs and the optional contact form before the chat |
Changes reach your live widget within about a minute of saving.
Install the widget
Copy the embed code from Dashboard → Widget → Install & security. It has your own site key filled in and looks like this:
<script src="https://api.apexbot.eu/widget.js" data-site-key="apex_pk_…" async></script>Paste it just before the closing </body> tag on every page where the chat should appear. Then add each address visitors use, for example https://example.com and https://www.example.com, under Allowed websites.
The site key is public by design: it only works on the websites you allow. If it's being misused, rotate it from the same screen and update the snippet on your site.
Platforms
WordPress
Use a header/footer code plugin (for example WPCode) and add the snippet to the site-wide footer, or paste it into your theme's footer.php before </body>.
Shopify
Online Store → Themes → Edit code, open layout/theme.liquid and paste the snippet before </body>.
Webflow, Wix and Squarespace
Add it as site-wide custom code in the footer: Site settings → Custom code (Webflow), Settings → Custom code (Wix) or Settings → Advanced → Code injection (Squarespace).
React, Next.js and other single-page apps
Load the script once, for example in your root layout. The widget keeps the conversation across client-side page changes on its own.
JavaScript API
Optionally set window.Apex before the script loads to override a few settings on a specific page:
<script>
// Optional settings, read when the widget loads
window.Apex = {
lang: "auto", // "auto", "tr" or "en"
greeting: "Hi! Ask me anything about our store.",
suggestions: ["Shipping times", "Return policy"],
theme: { primary: "#312c85", position: "bottom-right" },
};
</script>Once loaded, window.Apex lets your own code control the widget. Calls made before it has loaded are queued and run in order.
Apex.open() // open the chat
Apex.close() // close it
Apex.toggle() // open or close
Apex.send("Where is my order?") // open and ask a question
Apex.identify({ name: "Ada", email: "ada@example.com" })
Apex.on("message", (m) => console.log(m.text, m.sources))
Apex.on("open", () => analytics.track("chat_opened"))| Event | When it fires |
|---|---|
open / close | The chat window opens or closes |
message | An answer has finished streaming; receives { text, sources } |
lead | The visitor submitted the contact form; receives { email, name, phone } |
handoff | The visitor sent a “Talk to a human” request |
Privacy controls
- Conversations are deleted automatically after the retention period you set under Install & security (30 days by default).
- Visitors can start a new chat at any time, which clears the old one from their browser. You can delete any stored conversation from the Conversations page.
- Emails, phone numbers and card numbers are masked in our logs.
- Add your privacy policy link under Messages to show it in the widget footer.
Troubleshooting
The launcher doesn't appear
- Check that the page's exact address (including
wwwandhttps) is listed under Allowed websites. Your browser console shows[Apex] Widget disabled: origin_not_allowedwhen it isn't. - Check the page isn't under one of the paths in Behavior → Hide on these pages.
- Make sure the snippet's
srcpoints tohttps://api.apexbot.eu/widget.jsand that the site key matches the one in your dashboard. After rotating the key, the old snippet stops working.
It says “I don't know” too often
- Check Knowledge: a website source that failed or found few pages shows why.
- Add the missing information as a text source.
- Set Persona → Answer confidence to Lenient for small knowledge bases.
Answers stopped
The daily token budget under Install & security may have run out; the chat offers hand-off until midnight UTC. You can also check the system status page.