Documentation
OmniChat product docs
Everything you can run in OmniChat — channels, inbox, AI, lead forms, WhatsApp tools, email API, CRM, teams, billing, and developer endpoints. Built for sellers and agencies who need one inbox across the channels customers already use.
Overview
OmniChat is a multi-channel messaging platform for businesses. Connect your channels, reply from one inbox (web + Android), turn on AI autopilot where you want it, run WhatsApp templates and campaigns, and send transactional or marketing email from your own domain.
- Unified inbox for WhatsApp, Telegram, Web Chat, Instagram, and Messenger — assign chats, filter Mine / Unassigned / Needs you
- Gemini-powered AI with confidence thresholds, handoff, and analytics
- Omni Bot — inbox assistant to build forms, add fields, publish, and verify changes with a live activity log
- Lead forms— visual Form Builder, public links, embed scripts, leads inbox, logic & scoring
- WhatsApp Cloud API templates, campaigns, OTP, and order verification helpers
- SES-backed Email API — domains, DNS, send, branded reply inbox, templates & broadcast
- Team stores, inbox routing skills, agency client management, Shopify/Woo integrations, outbound webhooks
Getting started
- Create an account at /signup.
- Open Connect and link at least one channel (WhatsApp or Telegram).
- Reply from Inbox. Optionally enable AI under AI.
- Add teammates under Team, connect a shop under Integrations, or set up Email for transactional sends.
- Optional: create a lead form under Forms or ask Omni Bot in the inbox to generate one.
Channels
WhatsApp Business (Meta Cloud API)
Connect via Meta: phone number ID, WhatsApp Business Account, and system user token (or guided connect flow). Supports templates, media, campaigns, OTP, and AI autopilot.
Path: /connect-whatsapp
Telegram Bot
Paste a BotFather token. Messages land in the same inbox with AI and presence support.
Path: /connect-telegram
Web Chat (widget + API)
Add a floating chat bubble, fullscreen overlay, popup iframe, or inline embed on any site — or build your own chat UI on top of the same public API. Visitor messages land in Inbox → Web Chat. Turn on AI → Web Chat Autopilot so OmniChat replies automatically; human agents can take over from Inbox and their replies appear in the widget too.
Setup: /connect-webchat · Full API: /developers#webchat-api
1) Floating widget (easiest)
<script src="https://www.getomnichat.com/embed/webchat.js" data-public-key="pk_wc_YOUR_KEY" async ></script>
2) Embed modes
data-mode="bubble" (default) — launcher + paneldata-mode="popup" — panel only, no bubbledata-mode="fullscreen" — covers the viewportdata-mode="inline" + data-target="#my-chat" — embed inside a div<!-- Popup iframe (no launcher) --> <iframe src="https://www.getomnichat.com/embed/webchat/pk_wc_YOUR_KEY" title="Chat" style="width:400px;height:680px;border:0;border-radius:16px" allow="clipboard-write" ></iframe> <!-- Fullscreen overlay --> <script src="https://www.getomnichat.com/embed/webchat.js" data-public-key="pk_wc_YOUR_KEY" data-mode="fullscreen" async ></script> <!-- Inline in a container --> <div id="my-chat" style="min-height:480px"></div> <script src="https://www.getomnichat.com/embed/webchat.js" data-public-key="pk_wc_YOUR_KEY" data-mode="inline" data-target="#my-chat" async ></script>
3) Panel size & visitor resize
Set a default width/height in Connect → Web Chat → Branding, or pass attributes on the script tag. Visitors can drag the top corner to resize (bubble/popup modes) and use the fullscreen button in the chat header. Size is remembered in localStorage.
<script src="https://www.getomnichat.com/embed/webchat.js" data-public-key="pk_wc_YOUR_KEY" data-width="520" data-height="640" async ></script> <script> window.OmniWebchat?.setSize(600, 700); window.OmniWebchat?.setFullscreen(true); </script>
4) Logged-in visitor identity
Pass your app's user id so the same person always maps to one thread. Use script attributes, URL query params on the chat page, or OmniWebchat.identify() after login.
<script
src="https://www.getomnichat.com/embed/webchat.js"
data-public-key="pk_wc_YOUR_KEY"
data-visitor-id="user_12345"
data-email="alex@example.com"
data-name="Alex"
data-metadata='{"plan":"pro"}'
data-skip-welcome="true"
async
></script>
window.OmniWebchat?.identify({
visitorId: "user_12345",
email: "alex@example.com",
name: "Alex",
metadata: { plan: "pro" },
skipWelcome: true,
});
# Chat page URL:
https://www.getomnichat.com/embed/webchat/pk_wc_YOUR_KEY?visitor_id=user_12345&email=alex@example.com&skip_welcome=15) Custom chatbot (your UI)
Authorization: Bearer pk_wc_… or X-Api-KeyPOST https://www.getomnichat.com/api/v1/webchat/messages with visitor_id + bodyGET …/messages?visitor_id=… — show direction: "outbound" (AI or human via sender_type: seller)session_status (ai_active, human_takeover, paused)POST …/webchat/upload then send with message_type + media_urlGET …/config and Connect → Web Chat → Brandingdata-visitor-id / OmniWebchat.identify() so threads follow the account across devices.name + email with messages so AI templates ({{customer_email}}, {{customer_id}}) match rows in your DB. Full flow: /docs#custom-toolspk_wc_…) to the browser. Keep any secret key or database credentials on your server only.Instagram DMs
Sign in with Meta Instagram Login (professional / business account). DMs land in Inbox → Instagram with AI autopilot, assignment, and presence.
Path: /connect-instagram
Facebook Messenger
Sign in with Facebook and pick the Page you manage. Page DMs land in Inbox → Messenger with AI autopilot, assignment, and presence.
Path: /connect-messenger
Unified inbox
One conversation list across connected channels. Filter by channel, search, open a thread, send text/media, use WhatsApp templates when the 24-hour window is closed, and see AI session state per chat.
- Realtime updates (new messages, read state, AI handoff)
- Presence so teammates know who is viewing a chat
- Push notifications for new customer messages (web PWA + Android)
- Deep links from notifications into the exact thread
Assignment & team filters
Assign conversations to teammates so everyone knows who owns a chat. From a thread header, open Assign / Transfer to assign, reassign, unassign, or take the chat yourself.
- Mine — chats assigned to you
- Unassigned — no owner yet
- Needs you — AI escalated to a human (
human_takeoversession). Push notifications can deep-link with?filter=needs_you
Assignee badges appear on conversation rows and in the chat header. Owners configure who is routable under Team → inbox routing.
Omni Bot (pinned inbox chat)
Omni Bot is a pinned conversation at the top of Inbox for store operations — especially lead forms, branding, publish links, and analytics. See Omni Bot for prompts, the activity log, and verification.
Path: /inbox
AI autopilot
Per-channel AI settings: brand voice, language rules, confidence threshold, auto-reply on/off, and escalation to a human. Gems (AI credits) are consumed on automated and assisted replies.
- WhatsApp, Telegram, Web Chat, Instagram & Messenger all supported
- Analytics under /ai/analytics — volume, handoffs, gem usage
- Works with Away / Welcome automations (Away only when autopilot is off)
- When confidence is low or the customer asks for a person, session status becomes
human_takeover— use Inbox → Needs you filter
Path: /ai
Omni Bot
Omni Bot is your in-app operations assistant — pinned at the top of Inbox. It uses the same Gemini stack as autopilot but runs tools against your store (forms, fields, publish status, share links, lead analytics). Each reply consumes AI gems.
Where to open it
- Web: Inbox → Omni Bot row (first in the list)
- Android: Inbox → Omni Bot → full-screen panel with streaming activity
What it can do (forms)
- Create blank forms, AI-generate from a prompt, or import CSV headers
- Add or edit fields safely with
add_lead_form_fields— merges without wiping existing fields - Update logic, scoring, notifications, branding, and JSX layout when you ask for design changes
- Publish (draft → live), share public link / embed / QR, list submissions & analytics
Activity log & verification
Streaming endpoint POST /api/ai/design-agent/stream shows real-time steps while Omni Bot works:
- Thinking… → Loading form data… → Adding form fields… → Verified saved fields
- Each step shows ✓ success or ✗ failure with a short summary
- After the reply, a badge confirms actions completed, warns if no tools ran, or flags partial failures
Field changes vs design changes
- Add/remove/edit fields → field tools only; layout and colors stay unchanged unless you ask
- Colors / layout / hero → JSX + branding tools
Example prompts
Add these fields to "Get Your Custom Website Built for FREE": - Reference Website URL (optional) - Design File Upload - Design Link (Figma) - Additional Project Details (textarea) Require either design file OR design link. Do not change the form layout. List my forms, publish the website form as live, and give me the public link and embed code.
Custom AI tools (shared)
Connect your PostgreSQL database or HTTPS merchant API once under AI → Custom Tools. The same tools work on WhatsApp, Telegram, Web Chat, Instagram, and Messenger. Autopilot on/off stays per channel — tools are not duplicated per channel.
HTTP — paste API URL
Quick path: paste a full HTTPS URL. Templates are filled per conversation:
GET https://api.yourshop.com/v1/customers/{{customer_id}}/orders?channel={{channel}}
# Also available: {{customer_phone}} {{store_id}} {{customer_email}} {{customer_name}}
# Web Chat: customer_id = visitor_idPostgreSQL — read-only user (recommended)
OmniChat only runs SELECT queries, but create a dedicated read-only DB user so nothing can write. In the app, enter host / port / database / user / password (not a connection-string paste).
A) All tables in public
CREATE USER omnichat_ro WITH PASSWORD 'strong-password'; GRANT CONNECT ON DATABASE your_database_name TO omnichat_ro; GRANT USAGE ON SCHEMA public TO omnichat_ro; GRANT SELECT ON ALL TABLES IN SCHEMA public TO omnichat_ro; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO omnichat_ro;
B) Only specific tables
CREATE USER omnichat_ro WITH PASSWORD 'strong-password'; GRANT CONNECT ON DATABASE your_database_name TO omnichat_ro; GRANT USAGE ON SCHEMA public TO omnichat_ro; GRANT SELECT ON TABLE public.orders, public.customers TO omnichat_ro;
C) Only specific columns (via a view)
CREATE OR REPLACE VIEW public.ai_customer_orders AS SELECT id, customer_phone, status, total_amount, created_at FROM public.orders; GRANT SELECT ON TABLE public.ai_customer_orders TO omnichat_ro; -- Do not grant SELECT on public.orders itself
How the AI knows which customer — and looks up your DB
Yes. The visitor can send identity with the message (or your site can pass it). OmniChat stores it on the conversation and fills tool templates so Autopilot can query your database/API for that person.
- Always: stable
visitor_id(UUID in localStorage) → becomes{{customer_id}} - Optional:
name+emailon send →{{customer_name}}/{{customer_email}} - Your Custom Tool SQL/API should match on email, phone, or an id you map to
visitor_id
# Customer (or your website) sends identity with the message
POST /api/v1/webchat/messages
Authorization: Bearer pk_wc_...
{
"visitor_id": "550e8400-e29b-41d4-a716-446655440000",
"body": "Where is my order?",
"name": "Alex Khan",
"email": "alex@example.com"
}
# AI Autopilot then can call your tool, e.g. Postgres:
# SELECT * FROM orders WHERE customer_email = $1
# with $1 = {{customer_email}} (alex@example.com)
# Or HTTP:
# GET https://api.shop.com/orders?email={{customer_email}}&channel={{channel}}Do chats show in the web Inbox?
Yes. Every Web Chat thread appears in the unified Inbox under the Web Chat channel (same place as WhatsApp / Telegram). Staff can read the full history, reply manually, or let Autopilot answer. Filter by channel or open All to see everything together.
Setup checklist
- Create the read-only user (examples above) or prepare an HTTPS GET endpoint
- Open AI → Custom Tools: + Postgres or Paste API URL → Test → Save
- New tool (Visual / SQL / HTTP) → describe when AI should use it → Test → Enable
- Turn on Autopilot per channel you want (settings still separate)
Also in the signed-in app: /developers → Custom AI data tools.
WhatsApp templates
Create and submit Meta message templates (marketing, utility, authentication). Browse Meta's library where available, preview on a phone mock, and send from Inbox when outside the customer care window.
Paths: /templates, /templates/new
Campaigns
Broadcast WhatsApp template campaigns to audiences (lists, CSV, CRM segments). Track send status and respect marketing opt-in where required.
Path: /campaigns
Automations
Preset flows you can enable without building a full workflow builder:
- Greeting— once on the customer's first inbound message; up to 3 bubbles back-to-back (WhatsApp, Telegram, Web Chat, Instagram, Messenger)
- Away— when that channel's AI Autopilot is off; once per chat until you reply manually (WhatsApp, Telegram, Web Chat, Instagram, Messenger)
- Abandoned cart — recover carts via WhatsApp template (with shop integration)
Path: /automations
Lead forms & Form Builder
Multi-step lead capture with a visual builder, public links, embed scripts, conditional logic, scoring, and a leads inbox. Create forms manually, from templates, via AI generate, CSV import, or ask Omni Bot.
Paths: /forms, /leads, builder at /forms/{id}
Permissions
forms_manage— create and edit formsforms_read— view leads and submissions only
Builder tabs
- Design — field catalog, live canvas, branding (title, colors, logo, hero, background)
- Logic — show / hide / require fields based on answers; tag or assign on submit
- Integrations — email owner, customer autoresponder, push on new lead
- Settings — honeypot, password gate, rate limit, availability window
- Preview — full respondent view with Desktop / Tablet / Mobile frames (device toggle lives here, not on Design)
- Publish — public link, embed script, QR code; set status to Live before sharing
Field catalog
Grouped types: Basic (text, email, phone, URL), Choice (dropdown, radio, checkbox), Files (respondent uploads), Rating, Advanced (signature, hidden), Content (heading, paragraph, divider, alert, image).
Branding uploads
- Open Design → deselect any field so the right panel shows Branding
- Form logo, Hero image, or Background — paste URL or click Upload (JPEG, PNG, WebP)
- Click Save in the top bar; refresh Preview if needed
Files store in your store media (R2) under assets and count toward storage quota on Billing.
Require one of several fields
In form settings you can require at least one field from a group — e.g. design file or Figma link:
"require_one_of": [
{
"field_keys": ["design_file", "design_link"],
"message": "Please upload a design file or share a design link."
}
]Set via Settings JSON, Omni Bot, or API. Enforced on submit (file counts when uploaded).
Public URLs & embed
- Direct link:
https://www.getomnichat.com/f/{public-key} - Embed:
/embed/lead-form.jswithdata-public-key - Draft forms return 404 on public URLs — publish first
<script src="https://www.getomnichat.com/embed/lead-form.js" data-public-key="lf_YOUR_PUBLIC_KEY" async ></script>
Leads inbox
Every submission lands in Leads. Score hot/warm/cold from form rules, add tags and notes, and get push or email alerts when Integrations are enabled.
API (authenticated + public)
# Store auth (session / API key)
GET https://www.getomnichat.com/api/forms
GET https://www.getomnichat.com/api/forms/{id}
PATCH https://www.getomnichat.com/api/forms/{id}
# Public (respondents)
GET https://www.getomnichat.com/api/v1/lead-forms/{publicKey}
POST https://www.getomnichat.com/api/v1/lead-forms/{publicKey}/submit
# multipart/form-data when file fields present
# Media for logo / assets
POST https://www.getomnichat.com/api/media/upload?kind=assetsEmail platform
Transactional and marketing email on Amazon SES, from your own domain. One store can hold multiple domains (plan max_domains).
Domains & DNS
- Register domain → get DKIM CNAMEs + MAIL FROM MX/TXT
- MX records show Priority 10 separately — set Priority = 10 in your DNS panel; copy name/value with Copy buttons
- Optional branded reply inbox on
reply.yourdomain.com(apex MX stays on your normal mailbox)
Send API
Authenticate with an Email API key:
Authorization: Bearer omni_email_live_... # or X-Api-Key: omni_email_live_...
curl -X POST https://www.getomnichat.com/api/v1/email/send \
-H "Authorization: Bearer omni_email_live_..." \
-H "Content-Type: application/json" \
-d '{
"from": "updates@yourdomain.com",
"to": "customer@example.com",
"subject": "Hello",
"html": "<p>Hi from OmniChat</p>"
}'SMTP relay
Prefer SMTP? Point your app at OmniChat's relay (Railway-hosted). Auth with username omnichat and your Email API key as the password. Messages enqueue into the same SES pipeline — verified domains, quotas, and logs apply. This does not replace WhatsApp OTP or hosted-Supabase Auth email. Point Auth Send Email Hook at /api/v1/email/auth-hook/{id} — never at this SMTP host.
Host: smtp.getomnichat.com Port: 51307 Username: omnichat Password: omni_email_live_...
// Nodemailer
nodemailer.createTransport({
host: "smtp.getomnichat.com",
port: 51307,
auth: { user: "omnichat", pass: "omni_email_live_..." },
});# Python
import smtplib
s = smtplib.SMTP("smtp.getomnichat.com", 51307)
s.starttls()
s.login("omnichat", "omni_email_live_...")Inbox, templates & broadcast
- Email inbox for replies to your branded receive domain
- Reusable HTML templates + AI assist
- Broadcast campaigns to CSV / lists / order audiences
Limits
Stores have daily and monthly send caps. Admins can override store limits and set per-domain daily/monthly caps when a store has many domains.
In-app: /email, /email/inbox, /email/templates, /email/broadcast
CRM & commerce helpers
CRM
Customer profiles with phone, tags, notes, order count, lifetime value, and marketing opt-in. Editable by roles with crm_edit.
Leads (form submissions)
Form submissions sync to the Leads inbox — separate from messaging Inbox but linked to the same store. Filter by form, score, tags, and export for follow-up. See Lead forms.
Products
Catalog for AI / shop context — sync or manage products used in conversations.
Order verify
Utility WhatsApp flow to confirm orders with customers via approved templates.
OTP API
Send and verify one-time passwords over WhatsApp Authentication templates. Configure length, expiry, template language, and API keys under OTP.
Path: /otp
Team & stores
- Invite teammates with role-based permissions
- Multi-store: operate several businesses from one login
- Owner vs member views for billing and settings
Inbox assignment & routing
Owners and managers assign customer chats from Inbox. Each member can be marked routable for inbox assignment and given routing skills (tags used when logic rules auto-assign leads or chats).
- Team page → per member: toggle routable, edit skills via
PATCH /api/inbox/agents - Inbox filters: Mine, Unassigned, Needs you — see Unified inbox
- Assign / Transfer sheet: assign, reassign, unassign, self-assign
Form permissions
Grant forms_manage to builders and forms_read to sales staff who only need the Leads inbox.
Paths: /team, /team/invites
Agency
Agencies can manage client stores: invite a client, accept/decline, switch into client context, and revoke access. Statuses: pending, active, declined, revoked.
Path: /agency
Integrations & webhooks
Shopify & WooCommerce
Connect shop domain, sync products (or live API mode), and power abandoned-cart / catalog-aware flows.
Path: /integrations
Outbound webhooks
Register HTTPS endpoints under Developers. Events are signed with a secret shown once at creation — verify signatures on your server.
Notifications
- In-app notification center
- Web push (PWA) and Android FCM for inbox & email — owner plus teammates with matching access
- Seller alerts for AI handoff and low AI gems
- Inbox deep links: open exact conversation;
?filter=needs_youopens Needs you when AI escalated to a human - New lead push when form Integrations → push is enabled
Billing & plans
Subscription plans, AI gem packs, storage, WhatsApp message allowances, and Email API plans (daily + monthly send quota, domain slots, bonus gems/storage). Stripe checkout on web; Google Play billing on Android when SKUs are mapped.
Path: /billing
Developers
Full interactive docs live inside the signed-in app at /developers. Highlights:
Omni API keys
Create scoped server keys on Developers → Omni API keys. Prefix omni_live_ — one credential with assignable access (email send, domains, OTP, order verify, forms read). Legacy per-service keys still work.
Authorization: Bearer omni_live_... # or X-Api-Key: omni_live_... # Requires scope email:send POST https://www.getomnichat.com/api/v1/email/send
- Web Chat:
/api/v1/webchat/messages,/api/v1/webchat/config,/api/v1/webchat/upload(Bearerpk_wc_…) - Widget embed: bubble, popup, fullscreen, inline; custom size, visitor resize, identity passthrough, emoji & file uploads
- Email domains & send:
/api/v1/email/domains,/api/v1/email/send - OTP send/verify endpoints (WhatsApp Authentication templates)
- Outbound webhook management & signing secrets
- Custom AI tools (shared across channels): full setup + Postgres grant examples on /docs#custom-tools · configure in AI → Custom Tools
- Lead forms:
GET /api/v1/lead-forms/{publicKey},POST …/submit(multipart for files); store CRUD at/api/forms - Omni Bot (in-app):
POST /api/ai/design-agent/stream(SSE activity log)
# Web Chat — send + poll (custom bot)
POST https://www.getomnichat.com/api/v1/webchat/messages
Authorization: Bearer pk_wc_...
{ "visitor_id": "uuid", "body": "Hello", "name": "Alex" }
GET https://www.getomnichat.com/api/v1/webchat/messages?visitor_id=uuid
Authorization: Bearer pk_wc_...
# Floating widget + custom size
<script
src="https://www.getomnichat.com/embed/webchat.js"
data-public-key="pk_wc_..."
data-width="520"
data-height="640"
async
></script>
# Fullscreen mode
<script src="https://www.getomnichat.com/embed/webchat.js" data-public-key="pk_wc_..." data-mode="fullscreen" async></script>
# Visitor identity
<script
src="https://www.getomnichat.com/embed/webchat.js"
data-public-key="pk_wc_..."
data-visitor-id="user_12345"
data-email="alex@example.com"
async
></script>
# Register email domain
POST https://www.getomnichat.com/api/v1/email/domains
Authorization: Bearer omni_email_live_...
{ "domain": "example.com", "from_local_part": "hello" }
# Send email
POST https://www.getomnichat.com/api/v1/email/send
{ "from": "hello@example.com", "to": "a@b.com", "subject": "Hi", "html": "<p>…</p>" }Android app
The OmniChat Android app mirrors core workflows: inbox (with Mine / Unassigned / Needs you filters, assign & transfer), connect channels, AI, email (compose, inbox, templates, broadcast), billing (including Play purchases), and notifications with deep links into chats and email threads.
Forms & Omni Bot on mobile
- Form Editor — same six tabs as web (Design through Publish)
- Upload logo and branding assets from the mobile branding panel
- Omni Bot in Inbox with streaming activity log and verification
- Leads list and per-form analytics
Support & security
- Public support: /support — form + email
- In-app live support chat for logged-in users (Account → Support)
- Policies: Privacy, Terms
- Keep API keys secret. Rotate compromised Email/OTP keys immediately from the app.
- You must comply with Meta, Telegram, and email (CAN-SPAM / local) rules for the channels you use.
Ready to build?
Sign up free, connect WhatsApp or Telegram, and open the inbox in minutes.