Documentation

Live in under five minutes.

Sign up, add your site, paste a tiny verify script, then connect the integration you want to answer from. Everything is managed from the dashboard.

Getting started

Overview

caniask.dev is a hosted chat widget for your website. Visitors ask questions on your site; you answer from wherever you already work — Slack, Discord, email, or a webhook into your own tools.

There are no SDKs to install and no keys to manage in code. The widget is a single async script, and every credential lives in your dashboard.

  • One snippet per site.
  • One-click OAuth for Slack and Discord.
  • Rotate or revoke from the dashboard — no redeploys.

Create your account

Sign in with Google or email. A single account can hold many sites — each with its own widget, integrations, and inbox.

Add your site

In the dashboard click Add site and enter your domain (for example acme.com). We generate a public site ID and a verify snippet.

Verify with the script

Paste this just before </body>. As soon as we see a load from your domain, the site flips to Verified and the chat bubble goes live.

<script async
  src="https://caniask.dev/widget.js"
  data-site="YOUR_SITE_ID"></script>

YOUR_SITE_ID is a public identifier — safe to ship in HTML.

Integrations

Pick where you'll answer

Open Site → Integrations and choose one or more. The dashboard handles every credential — you'll never paste a token in code.

IntegrationYou'll needHow it's set up
SlackWorkspace + channelOne-click OAuth. Pick the channel where new threads land.
DiscordServer + channelOne-click OAuth. Pick the channel for new conversations.
EmailInbox addressWe send threaded replies; you reply from your inbox.
WebhookURL + signing secretWe POST every message; verify the signature, forward anywhere.

Slack

Integrations → Slack → Connect opens Slack's OAuth screen with the right scopes pre-filled. Approve the install, pick a channel, and you're done. Every visitor message starts a new thread there; replying in that thread sends the message back to the widget.

Discord

Integrations → Discord → Connect walks through the bot install. After approval, pick the channel new conversations should land in. Replies in the thread go back to the widget.

Email

Add the inbox you want to receive conversations on. Each visitor message arrives as an email with a threaded subject line — replying from your mail client posts back to the widget.

Webhook

For custom routing, point us at any HTTPS endpoint. We POST a JSON payload signed with a secret we generate; verify the signature header before processing.

POST https://your-app.example.com/inbound
content-type: application/json
x-caniask-signature: t=1719600000,v1=…

{
  "site_id": "site_…",
  "conversation_id": "conv_…",
  "message": { "id": "msg_…", "body": "Hello!" }
}

Reference

Widget API

The widget exposes a small global for advanced control. Call it after the script tag has loaded.

// Open / close programmatically
window.caniask?.open();
window.caniask?.close();

// Identify a signed-in visitor
window.caniask?.identify({
  id: "user_123",
  email: "ada@acme.com",
  name: "Ada Lovelace",
});

Security

The site ID in your HTML is public and scoped to your verified domain — it can't be reused on another origin. Every integration credential is encrypted at rest and revocable from the dashboard.

Conversations are scoped per site with row-level security. You can export or delete a site's data at any time from Settings → Data.

FAQ

Do I manage any API keys in code?
No — the only thing in your HTML is the public site ID. Everything else lives in the dashboard.
Can I run multiple integrations?
Yes — Slack + webhook + email on the same site is a common setup.
How do I disconnect?
Site → Integrations → Disconnect. Credentials are revoked immediately.
Will it slow down my site?
Under 8KB gzipped, loaded async. Zero impact on first paint.