Qply Documentation

Everything you need to add AI-powered live chat to your website. From a 60-second embed to advanced API integrations.

Quick Start

Get Qply running on your website in under a minute.

1

Create your account

Go to qply.io/app/signup and sign up with your email or Google account. You'll start with a 14-day free trial on your chosen plan.

2

Copy your embed code

After signing up, go to the Embed tab in your dashboard. You'll see a one-line script tag with your unique site key.

3

Paste it on your site

Add the script tag before </body> on any page. The widget will appear in the bottom-right corner.

Tip: The widget works immediately with AI auto-reply. To improve answers, add content to your Knowledge Base.

Embed Snippet

Your embed code looks like this:

<script>
  window.AIChatConfig = {
    serverUrl: 'wss://api.qply.io',
    siteKey: 'YOUR_SITE_KEY',
    color: '#4F46E5',
    consentRequired: false,
  };
</script>
<script src="https://qply.io/widget.js" async></script>

Replace YOUR_SITE_KEY with the key from your Embed tab. The async attribute ensures it doesn't block page load.

About consentRequired: set to true if your site serves visitors in the EU/UK/EEA/Switzerland or has a cookie banner. The widget will refuse to capture IP, geolocation, user-agent, and marketing attribution until your banner calls window.qply.consent('granted'). Most popular CMPs (Shopify, Cookiebot, OneTrust) are auto-detected. Leave it at false if you don't need consent gating. See Privacy & GDPR for full details.

HTML / Any Website

Paste the embed snippet before the closing </body> tag in your HTML:

<!DOCTYPE html>
<html>
<head>
  <title>My Website</title>
</head>
<body>
  <!-- Your page content -->

  <!-- Qply chat widget -->
  <script>
    window.AIChatConfig = {
      serverUrl: 'wss://api.qply.io',
      siteKey: 'YOUR_SITE_KEY',
      color: '#4F46E5',
    };
  </script>
  <script src="https://qply.io/widget.js" async></script>
</body>
</html>

WordPress

Two options for adding Qply to WordPress:

Option A: Theme editor (simple)

  1. Go to Appearance → Theme File Editor
  2. Open footer.php (or header.php)
  3. Paste the embed snippet before </body>
  4. Click Update File

Option B: Plugin (recommended)

  1. Install a plugin like Insert Headers and Footers (by WPCode)
  2. Go to Code Snippets → Footer
  3. Paste your embed snippet
  4. Save
Note: If you're using a page builder (Elementor, Divi), add the script via a Custom HTML block on each page, or use the plugin method for site-wide coverage.

Shopify

  1. Go to Online Store → Themes → Actions → Edit Code
  2. Open theme.liquid
  3. Paste the embed snippet before </body>
  4. Click Save

The widget will appear on every page of your store, including product pages and checkout.

Webflow

  1. Go to Project Settings → Custom Code
  2. Paste the embed snippet in the Footer Code section
  3. Click Save Changes and Publish

Wix

  1. Go to Settings → Custom Code (or use Tracking & Analytics)
  2. Click + Add Code
  3. Paste the embed snippet
  4. Set placement to Body - end and apply to All pages
  5. Click Apply

React / Next.js

Load the widget script dynamically in your root layout or App component:

// app/layout.tsx (Next.js App Router)
import Script from 'next/script'

export default function RootLayout({ children }) {
  return (
    <html>
      <body>
        {children}
        <Script id="qply-config" strategy="lazyOnload">{`
          window.AIChatConfig = {
            serverUrl: 'wss://api.qply.io',
            siteKey: 'YOUR_SITE_KEY',
            color: '#4F46E5',
          };
        `}</Script>
        <Script
          src="https://qply.io/widget.js"
          strategy="lazyOnload"
        />
      </body>
    </html>
  )
}

For plain React (Create React App / Vite):

// src/App.jsx
import { useEffect } from 'react'

function App() {
  useEffect(() => {
    window.AIChatConfig = {
      serverUrl: 'wss://api.qply.io',
      siteKey: 'YOUR_SITE_KEY',
      color: '#4F46E5',
    }
    const s = document.createElement('script')
    s.src = 'https://qply.io/widget.js'
    s.async = true
    document.body.appendChild(s)
    return () => document.body.removeChild(s)
  }, [])

  return <div>{/* your app */}</div>
}

Colors & Branding

Customize the widget's appearance in Settings → Widget in your dashboard:

You can also use the Widget Preview tab to see changes in real-time before saving.

Position & Launcher

Welcome Message

Set a welcome message in Settings → Widget. This appears when a visitor opens the chat for the first time. Examples:

Quick Questions

Add up to 4 quick-reply buttons that appear below the welcome message. These help visitors start a conversation with a single click.

Configure them in Settings → Widget → Quick Questions.

AI Auto-Reply

Qply uses AI to automatically answer visitor questions. Here's how it works:

  1. A visitor sends a message through the widget
  2. The AI searches your Knowledge Base for relevant information
  3. It generates a contextual reply based on your docs and training data
  4. If the AI can't answer or the visitor asks for a human, it triggers agent handoff
AI replies are counted per plan. Starter gets 100/month, Growth gets 3,000, Pro gets 10,000. See Plans for details.

Knowledge Base

The Knowledge Base is how you train the AI. Better content = better answers.

Adding content

Go to the Knowledge tab in your dashboard. You can add content in three ways:

How it works

  1. You add content (text, file, or URL)
  2. Qply extracts the text and shows you a preview
  3. You review/edit the extracted text
  4. On save, the text is split into semantic chunks and indexed
  5. When a visitor asks a question, the AI searches these chunks for relevant context
Tip: The more specific and well-structured your content is, the better the AI will answer. Include common questions and their answers.

Agent Handoff

When the AI can't answer a question or a visitor specifically asks for a human, the conversation is escalated:

Conversations

The main view of your dashboard. Here you can:

Analytics

Track your support performance with built-in analytics:

Live Visitors

See who's on your website right now. The Live tab shows:

Team Management

Add team members from the Team tab:

Each agent gets a username and password to log in via "Sign in as Agent" on the login page. Agents can set their availability (online/away/offline).

Campaigns

Send proactive messages to visitors based on the page they're viewing. Use campaigns to:

Configure campaigns in the Campaigns tab with a page URL pattern, message, and delay.

Plans & Pricing

FeatureStarter ($12/mo)Growth ($19/mo)Pro ($49/mo)Enterprise
AI replies/month3001,0005,000Unlimited
Agents125Unlimited
Knowledge base docs51050Unlimited
AnalyticsBasicAdvancedFull + exportFull + export
Custom brandingYesYes
File attachmentsYesYesYes
SSO / SAMLYes
SLAYes

Upgrade anytime from the Pricing tab in your dashboard. Billing is handled securely via Stripe.

Usage & Limits

Track your current usage in the dashboard sidebar (bottom):

Usage resets on the 1st of each month. If you hit your limit, AI auto-reply pauses but human agents can still respond. Upgrade your plan to continue.

Security Overview

Qply takes security seriously. Here's how your data is protected:

Two-Factor Authentication

Enable 2FA for an extra layer of security:

  1. Go to Settings → Security
  2. Click Enable 2FA
  3. Scan the QR code with an authenticator app (Google Authenticator, Authy, 1Password)
  4. Enter the 6-digit code to verify

Once enabled, you'll need to enter a code from your authenticator app every time you log in.

Allowed Domains

Restrict which websites can load your chat widget. Go to Settings → Allowed Domains and add your domain(s).

If no domains are configured, the widget will load on any site with your embed code. We recommend adding your production domain to prevent unauthorized use of your site key.

Important: If you set allowed domains, make sure to include all domains where you embed the widget (including staging environments), or the widget won't load.

GDPR Overview

If your website serves visitors in the EU, UK, EEA, or Switzerland, you are legally required to obtain explicit consent before any non-essential tracking runs. Qply is built to integrate cleanly with your existing cookie banner — when consent is denied, the widget switches to a minimal mode that does not capture IP address, geolocation, user-agent, or marketing attribution (UTMs, gclid, fbclid, etc.). The chat itself continues to work.

You (the website operator) are the data controller and are responsible for showing the cookie banner. Qply is the data processor, governed by our Data Processing Agreement.

Opt in to consent-aware behavior by setting consentRequired: true in your embed config:

<script>
  window.AIChatConfig = {
    serverUrl: 'wss://api.qply.io',
    siteKey: 'YOUR_SITE_KEY',
    color: '#4F46E5',
    consentRequired: true,
  };
</script>
<script src="https://qply.io/widget.js" async></script>

With this flag set, the widget defaults to denied and waits for an explicit signal before capturing tracking data. Without the flag (the default), the widget runs normally — appropriate for sites that don't serve EU/UK visitors and don't have a cookie banner.

Tip: The legacy data-consent-required="true" attribute is still supported for backwards compatibility, but the JS config form above is recommended.

From your cookie banner's Accept/Decline handlers, call:

// User clicked Accept
window.qply.consent('granted');

// User clicked Decline
window.qply.consent('denied');

// User revoked previous consent
window.qply.consent('revoked');  // treated as denied

That's the entire integration. The widget will:

Example with a custom banner:

<div id="cookie-banner">
  We use cookies to improve your experience.
  <button id="accept">Accept</button>
  <button id="decline">Decline</button>
</div>

<script>
  document.getElementById('accept').onclick = function () {
    window.qply.consent('granted');
    document.getElementById('cookie-banner').style.display = 'none';
  };
  document.getElementById('decline').onclick = function () {
    window.qply.consent('denied');
    document.getElementById('cookie-banner').style.display = 'none';
  };
</script>

Listen for consent changes from anywhere in your code:

window.addEventListener('qply:consent', function (e) {
  console.log('Qply consent state:', e.detail); // 'granted' | 'denied' | 'revoked'
});

If you use one of the following Consent Management Platforms, Qply detects the consent state automatically — no integration code required:

Just add data-consent-required="true" to the embed and you're done. Qply will sync with your CMP automatically, including live updates if the visitor changes their preferences mid-session.

Using a different CMP (Didomi, CookieYes, Quantcast, custom)? Call window.qply.consent('granted'|'denied') from your CMP's accept/decline callback — the API works with any banner or framework.

When consent is denied, the widget operates in minimal mode:

When the visitor later accepts, call window.qply.consent('granted') and the widget reconnects with full functionality on the next message.

Need help? Email us at [email protected] or use the chat widget on this page.

© 2025–2026 Qply, a product of Apptesterhub. All rights reserved. International billing via Apptesterhub LLC (Wyoming, USA). Third-party brands and trademarks mentioned on this site are the property of their respective owners; Qply is not affiliated with, endorsed by, or sponsored by them.